【解決策】User Role Editorで作成した権限グループの管理画面表示をカスタマイズ

【解決策】User Role Editorで作成した権限グループの管理画面表示をカスタマイズ

2025年2月1日

株式会社まほろばの鈴木(@mahoroba148)です。

WordPressでユーザーごとにアクセス権限を設定したい

そんなときに便利な「User Role Editor」プラグイン

オリジナルの権限グループを作成して、権限グループごとに投稿・固定ページなどのアクセス権限を設定できます。

支店の担当者や外部に依頼する場合には余分な管理ページにアクセスできないように適切に設定したいものです。

「User Role Editor」では設定しきれないこと

基本的には「User Role Editor」プラグインで完結できるものの、条件によっては制御しきれないことがあります。

たとえば「Contact Form 7」を使用している場合。

自分の投稿のみ作成・公開が可能な投稿者(author)の権限でも管理画面にされます。

投稿者の管理画面

従業員ならまだしも外部ライターに依頼する場合には非表示にしたいですよね。

そんな「User Role Editor」で設定しきれない管理画面の表示をカスタマイズする!が当記事のテーマです。

早く解決策を知りたい方は【コピペ可】管理画面表示をカスタマイズまで飛ばしてください。

WordPressの基本権限グループ

WordPressでは5つの権限グループが用意されています。

権限ロール名主な権限
管理者administratorサイト全体の管理(すべての機能へのアクセス:プラグイン・テーマ管理、ユーザー管理、設定変更など)
編集者editorすべての投稿・固定ページの管理(他ユーザーの投稿も編集可能)、コメント管理
投稿者author自分の投稿のみ作成・編集・公開可能、メディアファイルのアップロード
寄稿者contributor投稿作成・編集は可能だが公開は不可(レビュー後に上位権限者が公開)、メディアファイルのアップロード不可
購読者subscriberプロフィール情報の管理のみ可能

「User Role Editor」を使ってユーザーに権限を付与できるのは管理者のみです。

また、上記以外にも自社オリジナルの権限グループを作成することができます。

【コピペ可】管理画面表示をカスタマイズ

function.phpを編集します。

編集者(editor)と独自の権限グループ(test_user)が対象

//function.php
function customize_admin_menu_for_roles() {
    // 現在のユーザー情報を取得
    $current_user = wp_get_current_user();

    // 対象とするロールを配列で指定(複数ロール対応)
    $restricted_roles = ['editor', 'test_user'];

    // 現在のユーザーが対象ロールを持つ場合
    if (array_intersect($restricted_roles, $current_user->roles)) {
        // 非表示にしたいメニュー項目のスラッグを配列で指定
        $menu_items_to_remove = [
            'index.php',                      // ダッシュボード
            'edit-comments.php',              // コメント
            'tools.php',                      // ツール
            'options-general.php',            // 設定
            'wpcf7',                          // Contact Form 7
            'edit.php?post_type=works',       // カスタム投稿タイプ:works
        ];

        // 指定されたメニュー項目を非表示にする
        foreach ($menu_items_to_remove as $menu_slug) {
            remove_menu_page($menu_slug);
        }
    }
}
add_action('admin_menu', 'customize_admin_menu_for_roles', 999);

編集箇所①権限グループの設定

// 権限グループの設定
    $restricted_roles = ['editor', 'test_user']; // 対象とするロールを配列で指定

対象にする権限グループを設定します。

たとえば編集者は対象にする場合は「editor」と投稿者を対象にする場合は「author」と入力します。

基礎知識:WordPressの基本権限グループのロール名をご覧ください。

オリジナルの権限グループを追加した場合は設定したスラッグを書きます。

カンマ区切りで書くと複数の権限グループを指定できます。

編集箇所②非表示にしたいメニュー項目

// 現在のユーザーが対象ロールを持つ場合
    if (array_intersect($restricted_roles, $current_user->roles)) {
        // 非表示にしたいメニュー項目のスラッグを配列で指定
        $menu_items_to_remove = [
            'index.php',                      // ダッシュボード
            'edit-comments.php',              // コメント
            'tools.php',                      // ツール
            'options-general.php',            // 設定
            'wpcf7',                          // Contact Form 7
            'edit.php?post_type=works',       // カスタム投稿タイプ:works
        ];

        // 指定されたメニュー項目を非表示にする
        foreach ($menu_items_to_remove as $menu_slug) {
            remove_menu_page($menu_slug);
        }
    }

管理画面で非表示にしたいメニュー項目を指定します。

非表示にしたいページのファイル名(例:●●.php)を指定するとメニューに表示されなくなります。

代表的な項目は以下の通りです。

'index.php',                  // ダッシュボード
'edit.php',                   // 投稿
'upload.php',                 // メディア
'edit-comments.php',          // コメント
'themes.php',                 // 外観
'plugins.php',                // プラグイン
'users.php',                  // ユーザー
'tools.php',                  // ツール
'options-general.php',        // 設定

ページのファイル名がわからない場合は実際の管理画面で確認することができます。

ページのファイル名の確認方法

非表示にしたいページが「admin.php」から始まる場合

Contact Form 7のように「admin.php?page=」と書かれている場合は「admin.php?page=」以降を指定します。

'wpcf7',                          // Contact Form 7
'ai1wm_export',                   // All-in-One WP Migation

プラグインの場合は「User Role Editor」の基本権限グループで調整できてしまうことが多いですが、覚えておくと便利です。

しっかりとページへアクセスできないようにする

今までの方法はメニュー項目を非表示するだけの機能でした。

つまりはURLを直接入力した場合、ページへアクセスができてしまいます。

しっかりとページへアクセスできないようにするためには別途アクセス制限をかけましょう。

管理画面の表示カスタマイズと同様にfunction.phpを編集します。

編集者(editor)と独自の権限グループ(test_user)が対象

//function.php
function restrict_admin_pages_for_event_manager() {
    // 現在のユーザー情報を取得
    $current_user = wp_get_current_user();

    // 制限対象のロールを指定
    $restricted_roles = ['editor', 'test_user']; // 対象とするロールを配列で指定

    // 現在のユーザーが制限対象のロールを持つ場合
    if (array_intersect($restricted_roles, $current_user->roles)) {
        // アクセス制限したいページやカスタム投稿タイプ、プラグインページを配列で指定
        $restricted_pages = [
            'index.php',                      // ダッシュボード
            'edit-comments.php',              // コメント
            'tools.php',                      // ツール
            'options-general.php',            // 設定
            'wpcf7',                          // Contact Form 7
            'edit.php?post_type=works',       // カスタム投稿タイプ:works
        ];

        // 現在のページ情報を取得
        $current_page = get_current_admin_page();

        // 現在のページが制限対象に含まれる場合アクセスをブロック
        if (in_array($current_page, $restricted_pages)) {
            wp_die(__('このページにはアクセスできません。'));
        }
    }
}
add_action('admin_init', 'restrict_admin_pages_for_event_manager');

編集箇所もメニュー非表示の方法と同じです。

【まとめ】アクセス権限は適切に設定しよう

「User Role Editor」で設定した後は実際のアカウントでログインしてみましょう。

権限の関係で意外と非表示になっていないメニューがあるかもしれません。

特にプラグインには注意が必要ですね。

「User Role Editor」で対応しきれない部分は追加で設定をしましょう。

また、今回は表示/非表示とアクセス制限を別々に記載していますが、コードを合わせて書いた方が設定ミスがありません。

未来の自分のためにも管理しやすいサイトにしましょう!

WordPressカスタマイズのお悩み相談

こんなことできるかな?

自分でカスタマイズできない。どこかにお願いできないかな?

WordPressnoカスタマイズやアップデート方法などの相談だけでもOK!
セカンドオピニオンのようにもご利用いただけます。

\相談だけしたいなら/

\実際に作業を依頼するなら/