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() を組み合わせてください。

お気軽にご相談ください

お見積りへ お問い合わせへ