2026年5月20日
2026年5月20日
WordPressの管理画面特定ページを非表示にする方法
はじめに
クライアントサイトや複数ユーザーが使うWordPressでは、必要のない管理画面ページを非表示にすることでUI を整理できます。ただし、メニューの非表示はUIの整理であり、URLへの直接アクセスを防ぐには別途アクセス制限が必要です。
解決手順
ステップ1:admin_menuフックでページを非表示にする
// functions.php — 管理者以外に特定のメニューを非表示
add_action('admin_menu', function() {
if (current_user_can('manage_options')) {
return; // 管理者はスキップ
}
// トップレベルメニューを非表示
remove_menu_page('tools.php'); // ツール
remove_menu_page('plugins.php'); // プラグイン
remove_menu_page('options-general.php'); // 設定
remove_menu_page('themes.php'); // 外観
// サブメニューのみ非表示
remove_submenu_page('options-general.php', 'options-discussion.php'); // ディスカッション設定
remove_submenu_page('options-general.php', 'options-permalink.php'); // パーマリンク設定
});
ステップ2:URLへの直接アクセスもブロックする
// functions.php — 非表示ページへの直接アクセスをブロック
add_action('admin_init', function() {
if (current_user_can('manage_options') || wp_doing_ajax()) {
return;
}
$restricted_pages = [
'tools.php',
'plugins.php',
'options-general.php',
];
$current_page = basename($_SERVER['PHP_SELF']);
if (in_array($current_page, $restricted_pages, true)) {
wp_safe_redirect(admin_url());
exit;
}
});
ステップ3:ダッシュボードウィジェットも非表示にする
// functions.php — 管理者以外にダッシュボードウィジェットを非表示
add_action('wp_dashboard_setup', function() {
if (current_user_can('manage_options')) {
return;
}
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');
});
ステップ4:WP-CLIでメニュースラッグを調べる
# 現在のメニュー一覧をデバッグ出力(wp-config.phpでWP_DEBUGを有効にして)
wp eval "
global \$menu;
foreach (\$menu as \$item) {
if (!empty(\$item[2])) echo \$item[2] . ' — ' . \$item[0] . PHP_EOL;
}
"
メニュースラッグ早見表
| メニュー | スラッグ |
|---------|---------|
| ダッシュボード | index.php |
| 投稿 | edit.php |
| メディア | upload.php |
| 固定ページ | edit.php?post_type=page |
| 外観 | themes.php |
| プラグイン | plugins.php |
| ユーザー | users.php |
| ツール | tools.php |
| 設定 | options-general.php |
注意事項
remove_menu_page()はメニューからの削除のみで、URLへの直接アクセスは可能です。真のアクセス制限はadmin_initフックでリダイレクト処理が必要ですwp_doing_ajax()の確認を忘れるとAJAXリクエストまでリダイレクトされ、プラグインが動作しなくなります- カスタム投稿タイプのメニュースラッグは
edit.php?post_type=your_post_typeの形式です
まとめ
管理画面ページの非表示は admin_menu フックの remove_menu_page() で実装します。URLへの直接アクセスも制限するには admin_init フックで wp_safe_redirect() を組み合わせてください。