2026年5月20日
2026年5月20日
WordPress管理画面のメニューを権限別に非表示にする方法|remove_menu_pageと直接アクセスの制限
WordPress の管理画面では、ユーザーの権限グループ(ロール)が持つ権限(capability)に応じて、表示されるメニューが決まります。たとえば「プラグイン」は activate_plugins、「設定」は manage_options の権限が必要なので、編集者や投稿者にはもともと表示されず、URL を直接開いても、権限が無いことを知らせるメッセージが表示されて開けません。
一方、「ツール」や「コメント」は edit_posts の権限で開けるため、投稿者以上のユーザーには表示されます。この記事では、こうした「権限上は開けるが、見せたくないメニュー」を整理する方法を説明します。内容は 2026年11月時点の WordPress 6.9 のソースコードで確認しています。
主なメニューのスラッグと必要な権限
メニューを消すときは、メニューの「スラッグ」(管理画面の URL の /wp-admin/ より後ろの部分)を指定します。
| メニュー | スラッグ | 表示に必要な権限 |
|---|---|---|
| ダッシュボード | index.php |
read |
| 投稿 | edit.php |
edit_posts |
| メディア | upload.php |
upload_files |
| 固定ページ | edit.php?post_type=page |
edit_pages |
| コメント | edit-comments.php |
edit_posts |
| 外観 | themes.php |
switch_themes または edit_theme_options |
| プラグイン | plugins.php |
activate_plugins |
| ユーザー | users.php |
list_users |
| プロフィール(ユーザー一覧を見られない人の場合) | profile.php |
read |
| ツール | tools.php |
edit_posts |
| 設定 | options-general.php |
manage_options |
カスタム投稿タイプのメニューは edit.php?post_type=投稿タイプ名、プラグインが追加したメニューは admin.php?page=xxx の xxx の部分がスラッグです。
1. メニューを非表示にする
次のコードは、管理者(manage_options の権限を持つユーザー)以外に「ツール」と「コメント」を表示しないようにします。子テーマの functions.php か、wp-content/mu-plugins/ に置いた PHP ファイルに書きます。
<?php
add_action( 'admin_menu', function () {
if ( current_user_can( 'manage_options' ) ) {
return; // 管理者には全部表示する
}
// トップレベルのメニューを消す
remove_menu_page( 'tools.php' ); // ツール
remove_menu_page( 'edit-comments.php' ); // コメント
// サブメニューだけを消す例(投稿 → タグ)
remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );
}, 999 );
最後の 999 は実行の優先度です。プラグインが追加したメニューは、そのプラグインが admin_menu で登録した後でないと消せないため、大きい数字にして後から実行します。
remove_submenu_page() の1つ目は親メニューのスラッグ、2つ目はサブメニューのスラッグです。
2. URL を直接開かれたときに止める
remove_menu_page() はメニューから項目を消すだけで、そのページへのアクセスは制限しません。URL を知っていれば、/wp-admin/tools.php を直接開けます。止めたい場合は、管理画面の読み込み時に現在のページを調べて処理を中断します。
<?php
add_action( 'admin_init', function () {
if ( current_user_can( 'manage_options' ) || wp_doing_ajax() ) {
return;
}
global $pagenow;
$blocked_pages = array( 'tools.php', 'edit-comments.php' );
if ( in_array( $pagenow, $blocked_pages, true ) ) {
wp_die(
esc_html( 'このページを表示する権限がありません。' ),
'',
array( 'response' => 403, 'back_link' => true )
);
}
} );
$pagenow には、開いている管理画面のファイル名(tools.php など)が入っています。プラグインのページ(admin.php?page=xxx)を止めるときは、'admin.php' === $pagenow で、かつ $_GET['page'] の値が対象のスラッグかを調べます。
wp_doing_ajax() の判定は、admin-ajax.php を使うプラグインの処理を止めないために入れています。ダッシュボードに戻したい場合は、wp_die() の代わりに wp_safe_redirect( admin_url() ); exit; を使います。
3. ダッシュボードのウィジェットを非表示にする
ダッシュボードに表示される標準のウィジェットは、wp_dashboard_setup のフックで remove_meta_box() を使って消せます。
<?php
add_action( 'wp_dashboard_setup', function () {
if ( current_user_can( 'manage_options' ) ) {
return;
}
remove_meta_box( 'dashboard_site_health', 'dashboard', 'normal' ); // サイトヘルスステータス
remove_meta_box( 'dashboard_right_now', 'dashboard', 'normal' ); // 概要
remove_meta_box( 'dashboard_activity', 'dashboard', 'normal' ); // アクティビティ
remove_meta_box( 'dashboard_quick_press', 'dashboard', 'side' ); // クイックドラフト
remove_meta_box( 'dashboard_primary', 'dashboard', 'side' ); // WordPress イベントとニュース
} );
3つ目の引数は、ウィジェットが置かれている場所です。標準では「クイックドラフト」と「WordPress イベントとニュース」が side、それ以外が normal です。
メニューのスラッグを調べる
いちばん簡単なのは、管理画面でメニューにマウスを重ね、リンク先の URL を見る方法です。/wp-admin/ より後ろの部分がスラッグです。
プラグインが追加したメニューをまとめて確認したい場合は、wp-config.php で WP_DEBUG と WP_DEBUG_LOG を有効にしたうえで、次のコードを一時的に追加し、管理者で管理画面を開きます。スラッグの一覧が wp-content/debug.log に書き出されます。
<?php
add_action( 'admin_menu', function () {
global $menu, $submenu;
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
error_log( print_r( wp_list_pluck( $menu, 2 ), true ) ); // トップレベル
error_log( print_r( array_map( function ( $items ) {
return wp_list_pluck( $items, 2 );
}, $submenu ), true ) ); // サブメニュー
}, PHP_INT_MAX );
管理画面のメニューは、管理画面を開いたときにだけ組み立てられます。WP-CLI の wp eval で $menu を表示しようとしても、中身は空です。確認が終わったら、このコードは消してください。
権限そのものを外す方法
「見せない」だけでなく「その操作をさせない」ことが目的なら、メニューを消すのではなく、ロールから権限を外します。たとえば、編集者からコメントを承認・削除する権限を外す場合は、WP-CLI で次のように実行します。
wp cap remove editor moderate_comments
ロールの権限の変更はデータベースに保存され、元に戻すまで続きます。PHP で add_cap() や remove_cap() を使う場合も同じで、ページを開くたびに実行するコードにはしないでください。権限の仕組みは次の記事で説明しています。
注意点
- メニューを消しても、REST API や他の画面から同じ操作ができる場合があります。操作そのものを止めたいときは、上の「権限そのものを外す方法」を使ってください。
- 管理者を判定する条件を間違えると、管理者自身のメニューも消えます。
functions.phpを編集する前に、FTP やファイルマネージャーで元に戻せる状態にしておきます。 - テーマを変えると
functions.phpのコードは効かなくなります。テーマに関係なく残したい場合はwp-content/mu-plugins/に置きます。