投稿者権限等で管理画面から不要なメニューを非表示にする方法

WordPressを使っていると、管理画面に表示されるメニューが多すぎて迷うことがあります。特にクライアント用サイトを作る場合、必要なメニューだけに絞ることで操作が簡単になります。ここでは、functions.phpにコードを追加する方法と、投稿者権限に他人の投稿を編集できる権限を付与する方法を紹介します。

実装のポイント

  • 管理者以外のユーザーには不要なメニューを非表示にする
  • コードをfunctions.phpに追加するだけで簡単に実装可能
  • 投稿者権限に「他人の投稿を編集」権限を付与することで、投稿者権限でも管理者作成の投稿を編集可能にできる

functions.php にコードを追加(メニュー非表示)


// 管理画面メニュー非表示
add_action('admin_menu', 'remove_menus_for_non_admin');
function remove_menus_for_non_admin() {
    if (!current_user_can('administrator')) {
        // 投稿メニューは残す(投稿者権限も編集できるように)
        // remove_menu_page('edit.php'); // 削除しない

        // 不要メニューを非表示
        remove_menu_page('upload.php');          // メディア
        remove_menu_page('link-manager.php');    // リンク
        remove_menu_page('edit-comments.php');   // コメント
        remove_menu_page('themes.php');          // 外観
        remove_menu_page('plugins.php');         // プラグイン
        remove_menu_page('users.php');           // ユーザー
        remove_menu_page('tools.php');           // ツール
        remove_menu_page('options-general.php'); // 設定
    }
}
補足
「管理者以外」に限定して非表示にしているので、自分が管理者の場合は全てのメニューが表示されます。必要に応じて「編集者」「投稿者」などの権限に合わせてカスタマイズ可能です。以下のように書き換えることで、対象ユーザーを限定できます。

投稿者権限だけを対象にする


if (current_user_can('author')) {
    // 投稿者権限だけに適用
}

編集者権限だけを対象にする


if (current_user_can('editor')) {
    // 編集者権限だけに適用
}

投稿者権限と寄稿者権限の両方を対象にする


if (current_user_can('author') || current_user_can('contributor')) {
    // 投稿者権限または寄稿者に適用
}

このように条件分岐を追加することで、より柔軟に管理画面をカスタマイズできます。

Lightningテーマで投稿者権限には管理者権限・編集者権限の記事を見せない(編集させない)方法


// Lightningテーマで投稿者権限には管理者権限・編集者権限の記事を見せない
add_action('pre_get_posts', 'hide_admin_editor_posts_from_authors');
function hide_admin_editor_posts_from_authors($query) {
    global $pagenow;

    // 管理画面の投稿一覧、かつメインクエリのときだけ実行
    if (is_admin() && $pagenow === 'edit.php' && $query->is_main_query()) {
        // 投稿者の場合のみ制御
        if (current_user_can('author') && !current_user_can('administrator')) {
            $current_user_id = get_current_user_id();

            // 投稿者以外(管理者・編集者)の投稿IDを取得して除外
            $args = array(
                'role__in' => array('administrator', 'editor'),
                'fields' => 'ID'
            );
            $excluded_users = get_users($args);
            $excluded_ids = array();
            foreach ($excluded_users as $user) {
                $excluded_ids[] = $user->ID;
            }

            // authorパラメータで自分の投稿のみ表示
            $query->set('author', $current_user_id);

            // さらに、もし必要なら投稿者以外の投稿も除外する方法
            // $query->set('author__not_in', $excluded_ids);
        }
    }
}

代用プラグイン

プラグインを使う場合、「Admin Menu Editor」や「White Label CMS」を使うと、コードを書かずにメニューを非表示にできます。権限付与については「User Role Editor」などで簡単に操作可能です。

まとめ

  • functions.phpにコードを追加して不要なメニューを非表示にできる
  • 投稿者権限に「他人の投稿を編集」権限を付与することで、投稿者でも管理者作成の投稿を編集可能にできる
  • 投稿者には管理者・編集者の記事を見せない(編集させない)こともできる
  • プラグインでも同様の操作ができるため、目的に応じて選択可能