Web制作の現場にいると、クライアントから「管理者権限ほど何でもできるわけじゃないけど、編集者権限よりは少し制限を緩めたい」といった、絶妙な権限管理を求められる場面に出くわします。
WordPress標準の6つの権限グループ(管理者・編集者など)だけではカバーしきれない、こうした「かゆい所に手が届く」カスタマイズ。例えば、「Aさんというスタッフには『投稿』メニューを見せたくない」といった個別対応が必要なケースですね。
今回は、そんなニッチな要望にサクッと応えるための、特定ユーザーログイン時に管理画面メニューを制御するコードをご紹介しましょう。
[実装] wp_get_current_user関数でユーザーを判定しremove_menu_pageで消す
以前よく使われていたget_currentuserinfo()は現在非推奨です。そこで、いまのスタンダードである
wp_get_current_user() を使用して実装します。ご利用のテーマ(または子テーマ)の functions.php に、以下のコードを記述してください。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
add_action( 'admin_menu', 'remove_menus_for_specific_user' ); function remove_menus_for_specific_user() { // 現在ログインしているユーザー情報を取得 $current_user = wp_get_current_user(); // 「ユーザー名」が一致する場合のみメニューを削除 // ※ 'target_username' の部分を実際のログインID(ユーザー名)に書き換えてください if ( $current_user->user_login === 'target_username' ) { // ▼非表示にしたいメニューのコメントアウト(//)を外してください // remove_menu_page( 'index.php' ); // ダッシュボード remove_menu_page( 'edit.php' ); // 投稿 // remove_menu_page( 'upload.php' ); // メディア // remove_menu_page( 'edit.php?post_type=page' ); // 固定ページ // remove_menu_page( 'edit-comments.php' ); // コメント // remove_menu_page( 'themes.php' ); // 外観 // remove_menu_page( 'plugins.php' ); // プラグイン // remove_menu_page( 'users.php' ); // ユーザー // remove_menu_page( 'tools.php' ); // ツール // remove_menu_page( 'options-general.php' ); // 設定 } } |
コード内の target_username を、制限をかけたい実際のユーザー名(ログインID)に変更するのをお忘れなく。これだけで、その人がログインした時だけ指定のメニューがスッと消え去ります。
[解説] メニューのスラッグ指定で非表示項目を自在にコントロールする
上記のコードにある remove_menu_page() の中身(引数)を変えることで、消したいメニューを自由に選定可能です。基本的にはブラウザのアドレスバーを見て、wp-admin/ の後ろに続くファイル名(例:edit.php)を指定すればOK。ただし、カスタム投稿タイプなどの場合は少し記述が異なるため、以下を参考に微調整を行ってください。
| 非表示にしたい項目 | 指定するコード(引数) |
|---|---|
| ダッシュボード | index.php |
| 投稿(一覧) | edit.php |
| メディア | upload.php |
| 固定ページ | edit.php?post_type=page |
| 外観 | themes.php |
| プラグイン | plugins.php |
| 設定 | options-general.php |
| カスタム投稿 | edit.php?post_type=スラッグ名 |
もし「ユーザー名」ではなく「ユーザーID」で管理したい場合は、条件分岐の部分を以下のように書き換えるのも手。
|
1 2 |
// ユーザーIDが「5」のユーザーを対象にする場合 if ( $current_user->ID == 5 ) { ... } |
ID指定の方が、万が一ユーザー名を変更された場合でも制御が外れないため、より堅牢な設計と言えるかもしれません。運用ルールに合わせて使い分けてみてください。


コメント