2026年5月20日
2026年5月20日
WordPressの投稿者が管理画面にアクセスできる範囲を制限する方法
はじめに
複数人でWordPressを運営する場合、投稿者や編集者が不必要なメニューや設定にアクセスできないよう制限することで、誤操作やセキュリティリスクを防げます。
管理画面メニューを非表示にする
// functions.php — 管理者以外にメニューを非表示
add_action('admin_menu', function() {
if (current_user_can('manage_options')) return; // 管理者はスキップ
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_submenu_page('options-general.php', 'options-discussion.php');
});
投稿者を自分の投稿のみに制限する
// functions.php — 投稿者が自分の投稿のみ見えるようにする
add_action('pre_get_posts', function($query) {
if (!is_admin() || !$query->is_main_query()) return;
if (current_user_can('edit_others_posts')) return; // 編集者以上はスキップ
$query->set('author', get_current_user_id());
});
// 投稿数のカウントも制限
add_filter('views_edit-post', function($views) {
if (current_user_can('edit_others_posts')) return $views;
// 自分の投稿数のみを表示するよう修正
global $wpdb;
$user_id = get_current_user_id();
// ...
return $views;
});
管理バーをフロントエンドで非表示
// functions.php — 特定ロール以外の管理バーを非表示
add_action('after_setup_theme', function() {
if (!current_user_can('edit_posts')) {
show_admin_bar(false);
}
});
投稿者が管理画面にアクセス自体をブロック
// functions.php — 投稿者を管理画面からリダイレクト
add_action('admin_init', function() {
if (is_admin() && !current_user_can('edit_others_posts') && !wp_doing_ajax()) {
wp_redirect(home_url());
exit;
}
});
ダッシュボードウィジェットを制限
// functions.php — 不要なダッシュボードウィジェットを削除
add_action('wp_dashboard_setup', function() {
if (current_user_can('manage_options')) return;
remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
remove_meta_box('dashboard_primary', 'dashboard', 'side');
remove_meta_box('dashboard_right_now', 'dashboard', 'normal');
remove_meta_box('dashboard_activity', 'dashboard', 'normal');
});
メディアライブラリを自分のファイルのみに制限
// 投稿者が自分がアップロードしたファイルのみ見えるようにする
add_filter('ajax_query_attachments_args', function($query) {
if (!current_user_can('edit_others_posts')) {
$query['author'] = get_current_user_id();
}
return $query;
});
注意事項
- メニューの非表示はセキュリティ対策ではなく、UIの整理です。URLに直接アクセスすればアクセスできる場合があります
- 本当のアクセス制限には
user_has_capフィルタや各機能のケイパビリティチェックが必要です wp_doing_ajax()の除外を忘れると、プラグインのAJAX機能が壊れることがあります
まとめ
remove_menu_page() でメニューを非表示にし、admin_init フックで current_user_can() チェックを行うことで投稿者の管理画面アクセスを効果的に制限できます。