特定のロールで管理画面の「プロファイル」を見せたくない

久しぶりにWP界隈に戻ってきました。

WPについては、JavaやRubyのような金額が稼げず、クラウドソーシングでもレッドオーシャンで「どんな金額でも」応募者が出てくる、その割には意外と面倒な部分が多く、少し気持ちが離れていました。

ただやっぱり需要は感じます。色々なサイトのソースを見るとやはりWPが多いし、WPらしからぬサクサクで動いているサービスサイトもやはりWPだったりします。

そういうサクサク動くサービスサイトを、WPを少々齧った程度のWeb制作者が手掛けようとしても手に余ってしまうのではないでしょうか?

この前も、とあるクラウドソーシングで見かけた案件が

「ココナラみたいなサイトをWPで。予算5万円、ベース出来ています」

ベースといっても無料テーマで投稿しただけのもの。

こういう認識がまかり通っているので、真っ当な見積もりなんて出すだけ無駄に思えてしまうんですね。。。

以上は前置き

最近、こういう簡単な要件のサイトがあり、ちょっとハマりました。

  • メンバー機能付きのサイト
  • アカウント情報は管理者が発行(自由に登録はできない)
  • メンバーは投稿のみができる
  • その他は限定的なプロフィールフォームがあるだけで何もできない

というようなもの。

WPの投稿をさせるためのメンバーシップなので、基本はWPの管理画面を流用します。

さほど難しい要件ではなさそうなのですが、ラクして構築しようとするとつまらない部分で壁に当たります。

まず、メンバー機能の実装ですが、定番のTheme My Loginは有償でしかもサブスクになってしまったので候補外です。

ログインについては、WPのログイン画面を使っても問題なさそうなプライベートな会員制サイトなので、おなじみのデフォルトログイン画面を使います。限られたメンバーしか入ってこないのでセキュリティには目を瞑ります。

ユーザー権限の調整は User Role Editor を使います。これも定番です。

さて、これだけでも要件は満たしているようですが、実際にログインしてみると、ダッシュボードに余計な項目が並んでしまいます。

もちろん、権限の調整だけで消せるものもありますが、どうしても残ってしまうものもあり、目障りです。

一般のユーザーに迷いなく使ってもらうために、目障りなものを削除するのは大切な気配りだと思いますし、UI/UXの基本だと思っています。

そもそも「ダッシュボード」ページ自体要りません。

そしてメールアドレスやらニックネームだかを変えて欲しくないので「プロフィール」ページも無くしたい。

ここで活躍するのがAdminimizerというドイツ製の頑健なプラグインです。本当にこのプラグインは周到で、しかも無料。頭が下がります。

ところが、どういうわけかAdminimizerを使っても「プロフィール」が消えてくれない。

おかしい・・・

jQueryを使って力技で消そうとしても、見た目は消えますが、ログインした時にprofile.phpにリダイレクトされてしまうんです・・・

小一時間以上悩みました。

結論から言うと、原因はAdminimizerが周到すぎるからなのでした。

Adminizerでは、「ダッシュボード」を非表示にすると、ログイン後のリダイレクトを「プロファイル」に自動的に変更してくれます。

ここに気付かず、色々なリダイレクト手法を試みてもうまく行かなかったのです。

本当によく出来ていますが、このページを発見するのに時間がかかってしまいました。

ここでリダイレクト先を、他のページに設定すればスッキリ解決です。

しかも、このプラグインでは、消しきれなかった項目をIDやクラスで半ば強制的に非表示にしてしまう機能も持っています。

これを駆使すれば、ほぼ完璧に自分の望み通りのダッシュボードを作れてしまいます。

まさに考え尽くされたマニアックなプラグインで、有料でも十分に価値がありますが全機能が無料で提供されています。

というわけで、WPって簡単そうで、要件を満たそうとすると手間がかかったり、暗闇をさまよい歩いた挙句成果が挙げられなかったりするので、受託界隈ではちょっと危険なプラットフォームなんですよね。

例えば、今回の場合、どうにもならなかった場合は管理画面自体を自作する必要があり、もはやWPを使う意味がないくらいコストがかかってしまう所でした。

「何とかなるさ」と楽観的に取り組まないとWP案件はキッツイです・・・

ついでの話ですが、

  • その他は限定的なプロフィールフォームがあるだけで何もできない

この要件に対してはどう対応したかと言うと、まず「限定的なプロフィールページ」を作るためにUser Meta Liteというプラグインを導入します。

もちろん、自作しても良いのですが、画像アップロードなどもあり調整に時間をかけたくなかったのでこれをチョイスしました。

これでプロフィールページが作れるのですが、単なる固定ページなので管理画面にリンクが欲しい所です。

ところが、これが良い方法がないんです・・・検索して出てくるのはかなり強引な方法ばかり。

比較的まともな(?)アプローチとしては以下のようなコードが見つかりました。

/*
管理画面にURLリンクを張る
*/

//空のメニュー生成
add_action( 'admin_menu', 'linked_url' );
function linked_url() {
    add_menu_page( 'memberEdit', 'メンバー情報編集', 'read', 'member-edit', '', 'dashicons-text', 198 );
    }

//メニュー項目を直接書き換え(順位番号が被ると機能しない)
add_action( 'admin_menu' , 'linkedurl_function' );
function linkedurl_function() {
    global $menu;
    $menu[198][2] = home_url('/memberEdit');
    }

グローバルの$menuをいじるので、これも強引ですが、スクリプトは使っていません。

また、メニュー順を表す数字が他と被ると機能しませんので、ここでは「198」と被らなさそうな数字にしてあります。10とか100はやめておいた方が良いでしょう。

参考までに。

コメント

タイトルとURLをコピーしました