WordPressで特定ユーザーのメニューを制限する方法【コード付き解説】

お客様が自分たちでお知らせの更新などを行いたいということで、サイトを引き渡したあとに自分以外の人がWordPressを操作することがあります。

その際にすべてのメニューが操作できる状態だと、うっかり重要な機能を操作してしまい、ページが消失してしまったり、最悪サイトが表示されなくなるといったリスクがあります。

こうしたリスクを防ぐために、お客様には重要なメニューが操作できないように、WordPressの特定のユーザーに対してメニューを制限する設定ができます。

本記事では、特定ユーザーに対してメニューを制限する方法を、コードの具体例とともにわかりやすく解説します。

初心者の方でもわかりやすいように、ステップごとに説明していきますので、ぜひ参考にしてください。

メニュー制限の具体的な例

実際に対応したケースでは、お知らせだけが更新できれば良いということだったので、「ダッシュボード」と「投稿」と「プロフィール」以外のメニューは非表示にすることがありました。

「ダッシュボード」と「投稿」と「プロフィール」以外のメニューを非表示
非常にシンプルな管理画面

こうしておけば、誤ってテーマファイルを編集してしまったり、重要なプラグインを無効にしてしまうことがなくなり安心ですね。

他にもよくあるパターンとしては、投稿者には記事の作成・編集を許可する一方で、サイトのデザインや設定に関わるメニューは表示させないようにするケースが典型的です。

これにより、ユーザーは自分の担当業務に集中でき、「変なところ触ったらどうしよう・・・」という心配もなくなり、管理者としてはサイトの安全性を保てて一安心です。

カスタマイズ方法

特定のユーザーに対してメニューを制限するためには、WordPressテーマの functions.php ファイルにコードを追加します。

以下は、具体的なコード例です。

function custom_remove_menu_items_for_user() {
    $user_id = get_current_user_id(); // 現在のログインユーザーIDを取得

    // ここで特定のユーザーIDを指定 (例: 3)
    if ($user_id == 3) {
        // メニューを非表示にする(非表示にしたくない場合は該当行を削除)
        remove_menu_page('index.php'); // ダッシュボード
        remove_menu_page('edit.php'); // 投稿メニュー
        remove_menu_page('upload.php'); // メディア
        remove_menu_page('link-manager.php'); // リンク
        remove_menu_page('edit.php?post_type=page'); // 固定ページ
        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'); // 設定
    }
}
add_action('admin_menu', 'custom_remove_menu_items_for_user', 999);

このコードをテーマの functions.php ファイルに追加することで、ユーザーIDが「3」のユーザーに対して、特定のメニュー項目が非表示になります。

このコードでは、「ダッシュボード」と「投稿」メニューを残し、それ以外のメニューをすべて非表示にする設定となっています。

なお、functions.phpは「外観」-「テーマファイルエディター」から変更が可能です。
※変更するときは必ずバックアップを取ってから、自己責任でお願いします。

ユーザーIDの取得方法

ユーザーIDは、WordPressの「ユーザー」-「ユーザー一覧」から確認できます。

ユーザー編集ページのURLに含まれる user_id パラメータ(例: user_id=3)を参照し、その値をコードに設定してください。
※実際に編集ページを開いて、ブラウザのURL欄から確認してもOK

ユーザーIDの確認方法

このようにfunctions.phpにコードを記述することで、特定のユーザーにのみ必要なメニューだけを表示し、誤操作を防ぐことができます。

メニューをさらにカスタマイズする方法

さらに柔軟な設定を行うことも可能です。

例えば、「特定のユーザー」ではなく、反対に「特定のユーザー以外」の全てのユーザーにメニュー制限を適用したい場合は、対象ユーザーIDを除外する形でコードを記述できます。

特定のユーザー以外に適用する場合

以下に、特定のユーザーID以外の全員に制限をかける方法を紹介します。

function custom_remove_menu_items_for_non_specific_user() {
    $user_id = get_current_user_id(); // 現在のログインユーザーIDを取得

    // ここで特定のユーザーIDを除外 (例: ユーザーIDが「3」のユーザーを除外)
    if ($user_id != 3) { // 実際は!=の半角
        // メニューを非表示にする
        remove_menu_page('index.php'); // ダッシュボード
        remove_menu_page('edit.php'); // 投稿メニュー
        remove_menu_page('upload.php'); // メディア
        remove_menu_page('link-manager.php'); // リンク
        remove_menu_page('edit.php?post_type=page'); // 固定ページ
        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'); // 設定
    }
}
add_action('admin_menu', 'custom_remove_menu_items_for_non_specific_user', 999);

このコードでは、ユーザーIDが「3」のユーザーを除外し、それ以外のすべてのユーザーに対してメニュー制限が適用されます。特定のユーザーだけがフルアクセスできるように設定したい場合に便利です。

ユーザーの役割(role)ごとに適用する場合

他には、WordPressのユーザーの役割ごとに表示メニューを設定するパターンもあります。

投稿者には「投稿」や「メディア」のみ表示し、編集者にはそれに加えて「固定ページ」や「リンク」も見せる、といったようにユーザーの役割ごとにメニューを調整することもできます。

function custom_remove_menu_items_for_roles() {
    // 現在のユーザーの役割を取得
    $current_user = wp_get_current_user();
    
    // 投稿者には一部のメニューを制限
    if (in_array('author', $current_user->roles)) {
        remove_menu_page('edit.php?post_type=page'); // 固定ページ
        remove_menu_page('link-manager.php'); // リンク
        remove_menu_page('edit-comments.php'); // コメント
        remove_menu_page('tools.php'); // ツール
    }
    
    // 編集者にはさらに柔軟な制御を設定
    if (in_array('editor', $current_user->roles)) {
        remove_menu_page('link-manager.php'); // リンク
        remove_menu_page('tools.php'); // ツール
    }
}
add_action('admin_menu', 'custom_remove_menu_items_for_roles', 999);

このコードでは、以下のように役割ごとに表示となるメニューを変えています。
投稿者(author) には「固定ページ」「リンク」「コメント」「ツール」のメニューが表示されません。
編集者(editor) には「リンク」と「ツール」メニューが表示されません。

これにより、ユーザーの役割に応じたカスタマイズが可能になり、権限の範囲内でメニュー表示をコントロールできます。

まとめ

特定のユーザーにメニュー制限を設けることは、WordPressサイトを安全に運営するための重要な対策です。

特に、複数のユーザーがアクセスするサイトでは、誤操作や不必要な機能へのアクセスを防ぐことができ、サイトを安全に運営するためには必ずした方が良いと思います。

この記事では、具体的なコード例を用いて、特定ユーザーや役割に基づいてメニューを制限する方法を紹介しました。

これらの方法を活用して、安心して運営できるWordPressサイトを構築していきましょう。

最後に今回の記事の内容が難しい、自分で設定するのが心配だと感じたら、以下の内容もご確認いただけると嬉しいです。

サイト制作に関するご相談・お見積りなどお気軽にご相談ください。

新規サイト制作では、提案・制作から公開後の保守・運用・更新までトータルで、あなたのお力になります。

既存のサイトでも、簡易な修正や機能追加、更新のお手伝いやレッスンなど、幅広く対応させていただきます。

まずは、お気軽に今お持ちのお悩みをお聞かせください。

コメント

タイトルとURLをコピーしました