【ITニュース解説】WordPress admin menu editor - Control Dashboard - No Plugin

2025年09月07日に「Dev.to」が公開したITニュース「WordPress admin menu editor - Control Dashboard - No Plugin」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

WordPress管理画面はプラグインに頼らず、`functions.php`へのコード追記でカスタマイズできる。メニュー項目の名前変更や追加、ユーザー権限に応じた表示/非表示の制御など、軽量で自由度の高い調整が可能になる。

ITニュース解説

WordPressは、多くの人がウェブサイトを作成するために利用している非常に人気のあるツールだ。ウェブサイトを管理するためのWordPressの管理画面には、さまざまなメニュー項目が並んでいるが、時にはその数が多くて使いにくく感じたり、クライアントには不要な項目があって混乱させてしまったりすることがある。また、よく使う外部ツールへのリンクを管理画面に直接追加したいと考えることもあるだろう。

このような管理メニューのカスタマイズは、通常であれば専用のプラグインを使って手軽に行うことができる。しかし、実はプラグインを使わずに、数行のコードを追加するだけで、より柔軟に、そしてサイトを軽量に保ちながらカスタマイズする方法がある。コードを触ると聞くと難しそうに感じるかもしれないが、ポイントを押さえればシステムエンジニアを目指す初心者でも十分理解し、実践できる内容である。この方法を学ぶことで、WordPressの管理メニューの名前を変えたり、項目の並び順を変えたり、新しいリンクを追加したり、あるいは特定のユーザーには見せたくないメニュー項目を非表示にしたりできるようになる。

しかし、この作業を始める前に、非常に重要な注意点がいくつかある。これからサイトのコードを直接編集することになるため、もし誤ったコードを記述してしまうと、ウェブサイトが正しく表示されなくなる可能性がある。そのため、必ず以下の二つの点に留意してほしい。一つ目は、「子テーマ」を使用することだ。WordPressのテーマは定期的にアップデートされるが、その際にテーマのファイルが上書きされるため、親テーマに直接加えた変更は消えてしまう。子テーマを使用すれば、親テーマのアップデートの影響を受けずに、自分のカスタマイズを安全に保つことができる。二つ目は、「サイトのバックアップ」を必ず取得することだ。万が一の事態に備え、コードを変更する前には必ずサイト全体のバックアップを取る習慣をつけてほしい。これにより、問題が発生した場合でもすぐに元の状態に戻すことが可能となる。

それでは、具体的なカスタマイズ方法を見ていこう。私たちがコードを記述するのは、使用している子テーマの中にある「functions.php」というファイルである。このファイルは、テーマに特定の機能を追加したり、WordPressの動作をカスタマイズしたりするために使われる。functions.phpファイルには、WordPressの管理画面からアクセスすることもできる。ダッシュボードの「外観」メニューから「テーマファイルエディター」を選択し、右側のドロップダウンメニューから現在利用している子テーマを選べば、そのファイル一覧の中にfunctions.phpを見つけることができる。また、FTP(ファイル転送プロトコル)を使ってウェブサーバーに接続し、/wp-content/themes/あなたの-子テーマ名/のパスをたどって直接ファイルを開いて編集することも可能だ。

このカスタマイズでは、WordPressが提供する強力な仕組みの一つである「フック」を利用する。フックは、WordPressが特定の処理を行う直前や直後に、私たちが書いたコードを実行させるための「ひっかけ」のようなものである。今回使用するのは「admin_menu」というフックで、これはWordPressの管理メニューが表示される直前に私たちのコードを実行するよう指示する。これにより、メニューが画面に描画される前に、その内容を自由に変更できるようになる。

既存のメニュー項目を変更する方法から説明する。例えば、「投稿」というメニューの名前を「記事」に変更し、関連性の高いアイコンに変えたい場合を考える。これには、PHPというプログラミング言語で記述された次のようなコードを使う。

1function wpadminify_customize_admin_menu() {
2    global $menu;
3    $menu[5][0] = 'Articles';
4    $menu[5][6] = 'dashicons-book-alt';
5}
6add_action( 'admin_menu', 'wpadminify_customize_admin_menu' );

このコードの動きについて解説する。まず、function wpadminify_customize_admin_menu() { ... }という部分で、私たちが実行したい処理をひとつの関数として定義している。関数名のwpadminify_customize_admin_menuは、他の関数名と重複しないように独自の名前を付けている。その関数の中で、global $menu;と記述することで、WordPressの管理メニュー全体の情報を格納している$menuというグローバル変数にアクセスできるようにしている。グローバル変数とは、プログラムのどこからでもアクセスできる特別な変数のことだ。

$menuは、WordPressの管理メニューの各項目を配列という形式で保持している。配列は、複数の値を順序付けて格納できる箱のようなものだと考えると良い。$menu[5][0] = 'Articles';という行では、配列$menuの5番目の要素(ここでは「投稿」メニューを指す)の、さらに0番目の要素に「Articles」という新しい値を設定している。[0]はメニューの表示名を格納する場所であり、このようにすることで「投稿」が「記事」に変わる。同様に、$menu[5][6] = 'dashicons-book-alt';という行では、5番目の要素の[6]番目の要素にdashicons-book-altという値を設定している。[6]はメニューのアイコンを指定する場所であり、dashicons-book-altはWordPressに組み込まれているアイコンフォント「Dashicons(ダッシュアイコンズ)」の中から、本のようなアイコンを選んで表示させている。最後に、add_action( 'admin_menu', 'wpadminify_customize_admin_menu' );という行で、先ほど定義したwpadminify_customize_admin_menu関数を、admin_menuフックが実行されるタイミングでWordPressに呼び出してもらうように登録している。

次に、全く新しいカスタムメニュー項目を追加する方法を見ていこう。例えば、ポートフォリオサイトへのリンクや、Google Analyticsのような外部ツールへのリンクをWordPressの管理画面に直接追加したい場合、add_menu_page()というWordPressの関数を使用する。

1function wpadminify_add_custom_menu_link() {
2    add_menu_page(
3        'Google Analytics',      // ブラウザタブに表示されるページタイトル
4        'Analytics',             // 管理メニューに表示されるテキスト
5        'manage_options',        // このリンクを見るために必要なユーザー権限
6        'https://analytics.google.com/', // このメニューをクリックしたときに開くURL
7        '',                      // ページコンテンツを出力する関数
8        'dashicons-chart-bar',   // メニューのアイコン
9        2                        // メニュー内の表示位置
10    );
11}
12add_action( 'admin_menu', 'wpadminify_add_custom_menu_link' );

このadd_menu_page()関数は、いくつかの情報を引数として受け取る。それぞれの引数が何を意味するかを理解することが重要だ。一つ目の引数'Google Analytics'は、このメニュー項目をクリックしたときに開かれるページのブラウザタブに表示されるタイトルである。二つ目の引数'Analytics'は、実際にWordPressの管理メニューに表示されるテキストだ。三つ目の引数'manage_options'は、このメニュー項目を表示するためにユーザーが持っているべき権限を指定する。manage_optionsという権限は、通常、管理者(Administrator)ロールを持つユーザーに付与されているため、この設定では管理者のみがこのリンクを見ることができる。四つ目の引数'https://analytics.google.com/'は、このメニュー項目をクリックしたときにユーザーがリダイレクトされるURLである。ここではGoogle Analyticsのウェブサイトを指定している。五つ目の引数''は、通常、メニュー項目が内部ページである場合にそのページの内容を出力するPHP関数を指定するが、今回は外部サイトへのリンクであるため、空の文字列を指定している。六つ目の引数'dashicons-chart-bar'は、このメニュー項目の横に表示されるアイコンを指定する。ここでもDashiconsを使用している。七つ目の引数2は、この新しいメニュー項目を既存のメニューのどこに配置するかを数値で指定する。数値が小さいほどメニューの上の方に表示されるため、2は「ダッシュボード」メニューのすぐ下に表示されることを意味する。この関数も、add_action( 'admin_menu', 'wpadminify_add_custom_menu_link' );によってadmin_menuフックに登録され、管理メニュー表示時に実行される。

さらに、特定のユーザーや役割(ロール)に対してメニュー項目を非表示にする、という強力なカスタマイズも可能である。例えば、クライアント専用のWordPressサイトを構築している場合に、管理者にしか必要のない「ツール」メニューを一般のクライアントユーザーからは見えないようにしたい場合を考える。これには、現在のユーザーが特定の権限を持っているかを確認するcurrent_user_can()関数や、特定のメニューを削除するremove_menu_page()関数を使用する。

1function wpadminify_remove_menus() {
2    if ( !current_user_can( 'manage_options' ) ) {
3        remove_menu_page( 'tools.php' );
4    }
5}
6add_action( 'admin_menu', 'wpadminify_remove_menus' );

このコードでは、if ( !current_user_can( 'manage_options' ) )という条件文を使っている。current_user_can('manage_options')は、現在のログインユーザーがmanage_optionsという管理者権限を持っている場合にtrueを返す関数だ。その前に!(NOT演算子)が付いているため、「もし現在のユーザーがmanage_options権限を持っていない場合」という条件になる。つまり、管理者に該当しないユーザーがログインしている場合に、remove_menu_page( 'tools.php' );が実行される。remove_menu_page()関数は、引数に指定された管理画面のページスラッグ(URLの一部)に対応するメニュー項目を削除する働きを持つ。ここでは'tools.php'を指定することで、「ツール」メニューが非表示になる。

また、特定のユーザー名を持つユーザーからメニューを隠すこともできる。例えば、「client_user」というログイン名のユーザーから「投稿」メニューを非表示にしたい場合は、以下のようになる。

1function wpadminify_remove_menus_for_user() {
2    $current_user = wp_get_current_user();
3    if ( $current_user->user_login == 'client_user' ) {
4        remove_menu_page( 'edit.php' );
5    }
6}
7add_action( 'admin_menu', 'wpadminify_remove_menus_for_user' );

ここではまず、$current_user = wp_get_current_user();という関数で、現在ログインしているユーザーの情報を取得している。取得したユーザー情報の中から、$current_user->user_loginでユーザーのログイン名を取り出し、それが'client_user'と一致するかどうかをif文で確認する。もし一致すれば、remove_menu_page( 'edit.php' );を実行して「投稿」メニューを非表示にする。「投稿」メニューのページスラッグは'edit.php'である点に注意が必要だ。

これらのカスタマイズは、それぞれ異なる関数として記述することもできるが、すべてを一つの関数にまとめてadmin_menuフックに登録することで、コードを整理し、管理しやすくすることができる。

1/**
2 * WPAdminify カスタム管理メニュー設定
3 */
4function wpadminify_custom_admin_menu_setup() {
5    global $menu;
6    $menu[5][0] = 'Articles'; // 「投稿」を「記事」に名前変更
7
8    add_menu_page( // カスタムのGoogle Analyticsリンクを追加
9        'Google Analytics',
10        'Analytics',
11        'manage_options',
12        'https://analytics.google.com/',
13        '',
14        'dashicons-chart-bar',
15        2
16    );
17
18    if ( !current_user_can( 'manage_options' ) ) { // 管理者以外のユーザーから「ツール」メニューを削除
19        remove_menu_page( 'tools.php' );
20    }
21}
22add_action( 'admin_menu', 'wpadminify_custom_admin_menu_setup' );

この統合されたコードは、先ほど説明した個別の変更を一つのwpadminify_custom_admin_menu_setup()関数の中に記述し、この関数を一度だけadmin_menuフックに登録している。これにより、WordPressの管理メニューが表示されるタイミングで、すべてのカスタマイズが一括で適用される。関数名にWPAdminifyと付いているのは、他のプラグインやテーマの関数と名前が衝突しないように、開発者が独自の名前を付けているためである。

このように、WordPressのfunctions.phpファイルを編集し、WordPressのフックや提供されている関数を適切に利用することで、プラグインに頼ることなく、管理メニューを自由自在にカスタマイズできる。これは、サイトの軽量化につながり、サイトの運営者やクライアントにとってより直感的で効率的な管理画面を提供するための、非常に強力なスキルとなる。このスキルを習得することは、システムエンジニアを目指す上で、WordPressの内部構造やカスタマイズの可能性を深く理解するための貴重な経験となるだろう。最終的な変更を公開サイトに適用する前には、必ず開発環境やステージングサイトで十分にテストを行い、問題がないことを確認するよう心がけてほしい。

関連コンテンツ

関連IT用語