[WP]特定のユーザーアカウントのみ管理画面のメニューを非表示にする方法

WordPress
スポンサーリンク

Web制作の現場にいると、クライアントから「管理者権限ほど何でもできるわけじゃないけど、編集者権限よりは少し制限を緩めたい」といった、絶妙な権限管理を求められる場面に出くわします。

WordPress標準の6つの権限グループ(管理者・編集者など)だけではカバーしきれない、こうした「かゆい所に手が届く」カスタマイズ。例えば、「Aさんというスタッフには『投稿』メニューを見せたくない」といった個別対応が必要なケースですね。

今回は、そんなニッチな要望にサクッと応えるための、特定ユーザーログイン時に管理画面メニューを制御するコードをご紹介しましょう。

[実装] wp_get_current_user関数でユーザーを判定しremove_menu_pageで消す

以前よく使われていた get_currentuserinfo()は現在非推奨です。

そこで、いまのスタンダードである wp_get_current_user() を使用して実装します。

ご利用のテーマ(または子テーマ)の functions.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」で管理したい場合は、条件分岐の部分を以下のように書き換えるのも手。


ID指定の方が、万が一ユーザー名を変更された場合でも制御が外れないため、より堅牢な設計と言えるかもしれません。運用ルールに合わせて使い分けてみてください。

コメント

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