WordPress管理画面で、特定のメニューを非表示にする方法[WordPress, 管理画面カスタム]

WordPress管理画面で、特定のメニューを非表示にする方法[WordPress, 管理画面カスタム]
お久しぶりです。tedate.jp、ownerです。

ここしばらく手元の案件や、将来的なR&Dっぽい動きに注力していたため、
じつに久しぶりの更新となります。

ようやく、更新を再開できそうな状況になってきたため、また記事の投稿を再開していきたく思ってます。
皆さんのWeb制作が、当サイトの記事によって少しでも楽しいものになれば幸いです。

WordPressの管理画面で、表示されるメニュー項目をカスタマイズしたい

さて今回は、直近の案件でふれる機会があったWordPressの管理画面カスタマイズに関しての記事になります。

WordPressの管理画面では、デフォルトの状態だと、「投稿」「固定ページ」「メディア」「コメント」「外観」等々の多くのメニュー項目が表示されていますよね。

案件によっては、これを「特定のユーザーや状況に応じて、表示されるメニュー項目をカスタマイズしたい」という要望をいただくケースがあったりします。

そこでこの記事では、
WordPressに用意されている関数 remove_menu_page()
アクションフック add_action() を使用して、
「管理画面の左側メニューの表示」を制御する方法について見ていきたいと思います。

WordPressの管理画面から、表示されるメニュー項目を非表示にする”remove_menu_page()”

それでは早速、「管理画面の左側メニューの表示」を制御する実際の方法についてです。

特定のメニュー項目を非表示にするには、
WordPressに用意されている関数 remove_menu_page() を使用します。
この関数を使用することで、管理画面から不要なメニューを取り除くことができます。

具体的には次のとおり。これを、使用しているテーマ内の functions.php に記載します。
※なお、これはWordPress案件に携わる際の常識中の常識ですが、 functions.php 編集の際は必ずバックアップを手元で取り、何かあってもすぐに復旧可能な状態で取り組むことを強くおすすめします。

function customAdminMenu() {
  if( !current_user_can('administrator') ) {
    remove_menu_page('users.php');
  }
}
if( !current_user_can('administrator') ) {
  add_action('admin_menu', 'customAdminMenu');
}

↑こちらのコードを functions.php に記載して適用(何らかの方法でデプロイ、もしくは手動アップロードして反映)すると、
「管理画面の左側メニューの表示を制御」する事ができます。

上記の例では、管理画面の左側メニューから、「ユーザー」メニューを非表示するコードになります。
コードの3行目を見ればお分かりの通り、WordPressの管理画面内では、
各メニューに対応するphpが存在しています。

それをWordPressに用意されている関数 remove_menu_page() を使用して、
非表示にしている、という流れになります。
これを実行する関数が
1行目で定義している customAdminMenu() で、(←こちらの関数名は、WordPressに用意されているものではなく自分で定義するものなので、プロジェクトに携わる他の人から見てもわかりやすい名前であれば特に決まりはありません)

これを実際にどのタイミングで実行するのか記述しているのが、
7行目の
add_action('admin_menu', 'customAdminMenu');
の部分になります。

これはWordPressの実案件でよく出てくる「アクションフック」というものになります。
「アクションフック」が何者であるかは、需要があれば他の記事でまた解説できればと思います。

ほかのメニュー項目を非表示にする場合。どれがどのメニューに対応しているか

上のセクションでは、
「ユーザー」メニューを非表示にする場合のサンプルコードをご紹介しました。

その他のメニューを非表示にする場合は、次の様になります。

function customAdminMenu() {
  if( !current_user_can('administrator') ) {
    remove_menu_page('index.php');                  // ダッシュボード
    remove_menu_page('edit.php');                   // 投稿
    remove_menu_page('upload.php');                 // メディア
    remove_menu_page('edit.php?post_type=page');    // 固定ページ
    remove_menu_page('edit-comments.php');          // コメント
    remove_menu_page('wpcf7');                      // お問い合わせ(プラグイン使用の場合)
    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('administrator') ) {
  add_action('admin_menu', 'customAdminMenu');
}

↑主要なメニューを非表示にする場合は、非表示にしたい上記のいずれかを記載する形となります。
なお、8行目のコメントアウトに記載してある通り、
対応する名前を指定してあげれば、プラグインが生成しているメニューを非表示にすることも可能です。
(この場合はお問い合わせプラグインの定番・著名・かつ偉大なプラグイン ContactForm7 のメニューを非表示にしている記述になります)

current_user_can(‘administrator’) では何をしているのか

ここまでのセクションで、「管理画面の左側メニューの表示を制御」する方法について見てきましたが、
サンプルコードの先頭から2行目、
末尾から3行目に書いてある
current_user_can('administrator')
↑これが何をしているかという部分について、補足として書いておきます。

current_user_can('')
というのは、「このユーザー権限をもつユーザーだった場合」
を表しており、
今回のケースのように
current_user_can('administrator')
とだけ書くと「管理者だった場合」という指定になります。

これを、if文の条件として、頭に ! をつけて記述すると(JavaScript等でもよく見る否定形の書き方ですね)、
「管理者ではない場合」となります。

つまり、今回のサンプルコードでは、
「複数のユーザーが登録する可能性がある」
「その複数のユーザーは管理者権限は持たない(編集者や投稿者など)」
「編集者や投稿者の管理画面には、必要なメニュー以外表示させない」

というような要望のある案件で、よく使用される書き方となります。

実際のWordPress案件では、この手のご要望をいただくケースは結構よくあることですので、
覚えておくと何かと役に立つことと思います。

WordPress公式のリンク

以下は、WordPress公式の
remove_menu_page()
current_user_can()
についての解説(というか仕様)のページとなります。

公式情報がやはり一番正確ですので、情報収集の際には必ず目を通すことをおすすめします。

remove_menu_page() — Function

current_user_can() — Function

この記事のまとめ

今回は、直近の案件でふれる機会があったWordPressの管理画面カスタマイズに関しての記事を制作してみました。

記事の中段でも書きましたが、
実際のWordPress案件では、例えば外部のライターさんや
複数の企業担当者が携わって運用されているWordPressを扱うケースも多々ありまして、
実際にこの様な管理画面カスタマイズのご要望をいただくケースが結構よくあります。
覚えておくと、WordPress案件に携わる際の、知見の幅が広がるかと思います。

この記事が皆さんのより良いWeb制作体験につながれば、嬉しく思います。
※この記事は内容の品質向上を目的に、随時更新を行う場合があります。

この記事をシェアする: