【WordPress】ユーザー別に管理画面項目を整理

管理者(自分)と、編集者、投稿者(複数人)が居る状態で、それぞれの管理画面に表示される項目をプラグインなしで設定する方法を自分用にメモします。

権限毎に切り替えるか、ユーザーIDで分けるかですが、今回はユーザーIDで分ける方法です。

管理画面に表示される項目

※CPT=カスタム投稿タイプ

デフォルト

権限毎にデフォルトで違いがあるのでまずそこに頼ります。

【管理者】
ユーザーID:1
【編集者】
ユーザーID:2
【投稿者】Aさん
ユーザーID:3
【投稿者】Bさん
ユーザーID:4
AdministratorEditorAuthor
  • ダッシュボード
  • 投稿
  • メディア
  • 固定ページ
  • コメント
  • 外観
  • プラグイン
  • ユーザー
  • ツール
  • 設定
  • CPT UI
  • ダッシュボード
  • 投稿
  • メディア
  • 固定ページ
  • コメント
  • 猫の話(CPT)
  • 花の話(CPT)
  • プロフィール
  • ツール
  • ダッシュボード
  • 投稿
  • メディア
  • コメント
  • 猫の話(CPT)
  • 花の話(CPT)
  • プロフィール
  • ツール

ユーザーグループの権限でだいぶ項目は削れますが、この上で管理者であるAdministrator以外の権限では触ってほしくない「コメント」「ツール」を非表示にしたいと思います。

さらに、編集者はカスタム投稿タイプの「猫の話」も「花の話」も管理出来るけど、投稿者には専用のカスタム投稿タイプしか触ってほしくない場合、ユーザー毎に表示される項目を設定します。

カスタム後

Aさんは「猫の話」専門
Bさんは「花の話」専門

【管理者】
ユーザーID:1
編集者Aさん
ユーザーID:2
【投稿者】Aさん
ユーザーID:3
【投稿者】Bさん
ユーザーID:4
AdministratorEditorAuthor
  • ダッシュボード
  • メディア
  • 投稿
  • 固定ページ
  • コメント
  • 外観
  • プラグイン
  • ユーザー
  • ツール
  • 設定
  • CPT UI
  • ダッシュボード
  • メディア
  • 投稿
  • 固定ページ
  • 猫の話(CPT)
  • 花の話(CPT)
  • プロフィール
  • ダッシュボード
  • メディア
  • 投稿
  • 猫の話(CPT)
  • プロフィール
  • ダッシュボード
  • メディア
  • 投稿
  • 花の話(CPT)
  • プロフィール

実装

functions.phpに書くだけ

使うのは管理画面のメニューを非表示にするremove_menus ()で、ユーザーIDによって条件を変えます。

function remove_menus () {
global $current_user;
//編集者
if ($current_user->ID == "2" ) {
    remove_menu_page('edit-comments.php');
    remove_menu_page('tools.php');
}
//投稿者:Aさん(CPT:猫(neko)専用)
if ($current_user->ID == "3" ) {
    remove_menu_page('edit-comments.php');
    remove_menu_page('tools.php');
    remove_menu_page('edit.php?post_type=hana');
}
//投稿者:Bさん(CPT:花(hana)専用)
if ($current_user->ID == "4" ) {
    remove_menu_page('edit-comments.php');
    remove_menu_page('tools.php');
    remove_menu_page('edit.php?post_type=neko');
}
//おまけ(複数のユーザーを指定する時)
if (($current_user->ID == "5")||($current_user->ID == "6")||($current_user->ID == "7")) {
    remove_menu_page('edit-comments.php');
    remove_menu_page('tools.php');
    remove_menu_page('edit.php?post_type=other');
}
}
add_action('admin_menu', 'remove_menus');

これで行けるのかな?と思ったけど行けたのでいいんだと思います。

get currentuserinfo()は非推奨になったとCodexに書いてあったので使わないようにしようと思いいろいろ見ていたけどgetを使わなくてもプロパティの値を直接取得できるらしいのでなくてもいいのかな。
$current_userで呼んでるからいいのか。

と迷いましたが動くので良い様です。

また、これは項目を非表示にするだけなので、URLにアクセスすれば表示されます。
もっと綿密に色々やりたかったらやっぱりプラグインの「User role Editor」を使うとかですよね。


Comments

コメントを残す