2026年5月20日
2026年5月20日
WordPressの管理画面メニューを特定のロールに制限する方法
はじめに
WordPressの管理画面は全メニューが表示されますが、ロールによって不要なメニューを非表示にすることで、操作ミスを防ぎユーザビリティを向上させることができます。
メニューを非表示にする基本
// functions.php
add_action('admin_menu', function() {
// 編集者以下には以下のメニューを非表示
if (!current_user_can('manage_options')) {
remove_menu_page('tools.php'); // ツール
remove_menu_page('options-general.php'); // 設定
remove_menu_page('plugins.php'); // プラグイン
remove_menu_page('themes.php'); // 外観
remove_menu_page('users.php'); // ユーザー
remove_menu_page('edit-comments.php'); // コメント(不要な場合)
}
});
サブメニューのみを非表示
add_action('admin_menu', function() {
if (!current_user_can('manage_options')) {
// 外観のサブメニューを制限
remove_submenu_page('themes.php', 'themes.php'); // テーマ
remove_submenu_page('themes.php', 'widgets.php'); // ウィジェット
remove_submenu_page('themes.php', 'nav-menus.php'); // メニュー
// 設定のサブメニューを制限
remove_submenu_page('options-general.php', 'options-discussion.php');
remove_submenu_page('options-general.php', 'options-permalink.php');
}
});
ロール別にメニューを細かく制御
// functions.php — ロール別メニュー制御
add_action('admin_menu', function() {
$user = wp_get_current_user();
$roles = (array) $user->roles;
if (in_array('author', $roles)) {
// 投稿者: ツール・設定・プラグイン・外観を非表示
remove_menu_page('tools.php');
remove_menu_page('options-general.php');
remove_menu_page('plugins.php');
remove_menu_page('themes.php');
remove_menu_page('users.php');
}
if (in_array('editor', $roles)) {
// 編集者: プラグイン・外観・設定のみ非表示
remove_menu_page('plugins.php');
remove_menu_page('themes.php');
remove_menu_page('options-general.php');
}
});
カスタムメニューページを追加
// functions.php — 投稿者向けシンプルメニューを追加
add_action('admin_menu', function() {
if (current_user_can('manage_options')) return;
add_menu_page(
'投稿管理', // ページタイトル
'記事を書く', // メニュー名
'edit_posts', // 必要権限
'post-new.php', // スラッグ(既存ページにリンク)
'', // コールバック
'dashicons-edit',
3
);
});
メニューの並び順を変更
// functions.php — メニューの順番を変更
add_filter('custom_menu_order', '__return_true');
add_filter('menu_order', function($menu_order) {
return [
'index.php', // ダッシュボード
'edit.php', // 投稿
'upload.php', // メディア
'edit.php?post_type=page', // 固定ページ
];
});
注意事項
- メニューの非表示はUIの変更のみ。URLに直接アクセスすれば機能は利用できます
- 真のアクセス制限には
current_user_can()を各機能内で使用してください - プラグインが追加するメニューのスラッグはプラグインのソースから確認してください
まとめ
admin_menu フックで remove_menu_page() と remove_submenu_page() を使い、current_user_can() でロールを判定してメニューを非表示にします。投稿者には記事作成に必要なメニューのみを残すのがベストプラクティスです。