デフォルトだといろいろな項目が表示されているWordPressの管理画面のサイドメニュー。
慣れていない人にはわかりづらいですよね。
また、権限によってデフォルトで非表示にしてくれたりもしますが、この部分は見せたくないな…ということも多いと思います。
今回はWordPressで権限やユーザーごとにサイドメニューの表示を変更する方法をご紹介します。
権限の種類について
まずはデフォルトの権限の種類についてご紹介します。基本的には5つの権限が用意されています。
管理者 (スラッグ: ‘administrator’) | シングルサイト内のすべての管理機能にアクセスできるユーザー。 |
---|---|
編集者 (スラッグ: ‘editor’) | 他のユーザーの投稿を含むすべての投稿を公開、管理できるユーザー。 |
投稿者 (スラッグ: ‘author’) | 自身の投稿を公開、管理できるユーザー。 |
寄稿者 (スラッグ: ‘contributor’) | 自身の投稿を編集・管理できるが、公開はできないユーザー。 |
購読者 (スラッグ: ‘subscriber’) | プロフィール管理のみを実行できるユーザー。 |
function.phpに記述する
設定についてはfunction.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 25 26 27 28 |
function remove_admin_menu() { 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('widgets.php'); // ウィジェット remove_menu_page('nav-menus.php'); // メニュー remove_menu_page('customize.php'); // カスタマイズ remove_menu_page('plugins.php'); // プラグイン remove_menu_page('users.php'); // ユーザー一覧 remove_menu_page('profile.php'); // プロフィール remove_menu_page('tools.php'); // ツール remove_menu_page('options-general.php'); // 設定 // カスタム投稿タイプを消したいとき(○○部分にカスタム投稿のスラッグを入れる) remove_menu_page('edit.php?post_type=○○'); //サブメニューだけを非表示にしたいとき remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=category'); // 投稿 > カテゴリーを非表示 remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=post_tag'); // 投稿 > タグを非表示 remove_submenu_page('themes.php', 'widgets.php'); // 外観 > ウィジェットを非表示 remove_submenu_page('options-general.php', 'breadcrumb-navxt');//プラグイン「Breadcrumb NavXT」を非表示 } add_action('admin_menu', 'remove_admin_menu', 999); |
例えば「投稿」などの親にあたるメニューについては、関数「remove_menu_page」を使って「○○.php」のような形で記述をしたらすぐに消えます。
カスタム投稿は「edit.php」の末尾に「?post_type=○○」のように記述をしてください。○○部分はカスタム投稿のスラッグを入れます。
サブメニュー部分は関数「remove_submenu_page」を使います。
まずは親の指定をして、そのあとURLやスラッグを指定します。
「設定」内にあるプラグインの指定は少々他と型が違います。
今回は一例としてパンくずナビゲーションを実装してくれる「Breadcrumb NavXT」を一例に出しました。
たいていはURL末尾についている「page=○○」の○○の部分を書くと消えますが、プラグインにもよるので自分で色々確かめて見てください。
権限ごとに振り分けて指定する
では権限ごとに振り分けて指定していきましょう。例えば管理者より下の権限は設定メニューを非表示にしたい、という場合は以下のように書けば一気に非表示にすることができます。
1 2 3 4 5 6 |
function remove_admin_menu() { if (!current_user_can('administrator')) { remove_menu_page('options-general.php'); // 設定メニューを非表示 } } add_action('admin_menu', 'remove_admin_menu', 999); |
もちろん特定の権限だけでも指定できます。
1 2 3 4 5 6 |
function remove_admin_menu() { if (current_user_can('editor')) { remove_menu_page('options-general.php'); // 設定メニューを非表示 } } add_action('admin_menu', 'remove_admin_menu', 999); |
権限だけではなく、特定のユーザーに対しても振り分けることができます。
ユーザーIDを取得して、後は該当のユーザーのIDを入れるだけです。
IDはユーザー詳細のURLなどに記載されています。
1 2 3 4 5 6 7 |
function remove_admin_menu() { $user_id = get_current_user_id(); if ($user_id == 3) { remove_menu_page('plugins.php'); // プラグインメニューを非表示 } } add_action('admin_menu', 'remove_admin_menu', 999); |
例えば管理者ではあるけど、そのユーザーには非表示にしたい…というときにも以下のような記述で使えます。
管理者より下の権限、またはユーザーID:3(この人は本来であれば管理者権限)の時にプラグインメニューが非表示になります。
1 2 3 4 5 6 7 |
function remove_admin_menu() { $user_id = get_current_user_id(); if (! current_user_can( 'administrator' ) || $user_id == 3) { remove_menu_page('plugins.php'); // プラグインメニューを非表示 } } add_action('admin_menu', 'remove_admin_menu', 999); |
これらを駆使すると、管理画面のメニューをきれいにできます。
プラグインなどを使用する方法もありますが、単純な物であればコード上で管理した方が分かりやすいと思います。
おまけ:CSSで非表示にする
ちなみにプラグインなど、どうしても消えない!という場合があります。そんな時はcssで消すのもありです。
このようにfunction.phpに記述をします。
1 2 3 4 5 6 7 8 9 10 |
function hide_menu_css() { if ( ! current_user_can( 'administrator' ) ) { echo '<style> #toplevel_page_xxxx { display: none !important; } </style>'; } } add_action( 'admin_head', 'hide_menu_css' ); |
何をしているかというと、サイドメニューのliタグについているidをコンソールなどで確認して、そのidに対して非表示の設定を行っています。
あまりスマートなやり方ではないと思うので多用はしないほうがいいと思いますが、どうしても消えない場合は試してみるのもありだと思います。
ぜひ試してみてください!