
WordPressの管理画面の左側に表示されるメニュー項目のカスタマイズメモです。
項目の非表示や並び替え、項目名の変更や独自メニューの追加などをまとめています。

各メニューの表示番号やスラッグ
メニュー項目をカスタマイズする際に必要になるのが、メニューに付けられている番号やスラッグの情報です。
既存メニューの番号が分からないと思った通りの位置に追加することができず、スラッグが分からないとそのメニューの変更ができません。確認できるようにしておくと実装がスムーズに進みます。
【出力されるコード例】(確認環境: WordPressバージョン・6.8.3、テーマ・twentytwentyfive)
[2]slug[index.php]title[ダッシュボード]
[0]→slug:[index.php]title[ホーム]
[1]→slug:[update-core.php]title[更新 <span class="update-plugins count-0"><span class="update-count">0</span></span>]
[4]slug[separator1]title[]
[5]slug[edit.php]title[投稿]
[0]→slug:[edit.php]title[投稿一覧]
[1]→slug:[post-new.php]title[投稿を追加]
[2]→slug:[edit-tags.php?taxonomy=category]title[カテゴリー]
[3]→slug:[edit-tags.php?taxonomy=post_tag]title[タグ]
[10]slug[upload.php]title[メディア]
[0]→slug:[upload.php]title[ライブラリ]
[1]→slug:[media-new.php]title[メディアファイルを追加]
[20]slug[edit.php?post_type=page]title[固定ページ]
[0]→slug:[edit.php?post_type=page]title[固定ページ一覧]
[1]→slug:[post-new.php?post_type=page]title[固定ページを追加]
[25]slug[edit-comments.php]title[コメント <span class="awaiting-mod count-0"><span class="pending-count" aria-hidden="true">0</span><span class="comments-in-moderation-text screen-reader-text">0件のコメントが承認待ちです</span></span>]
[59]slug[separator2]title[]
[60]slug[themes.php]title[外観]
[0]→slug:[themes.php]title[テーマ <span class="update-plugins count-0"><span class="theme-count">0</span></span>]
[1]→slug:[site-editor.php]title[エディター]
[65]slug[plugins.php]title[プラグイン <span class="update-plugins count-0"><span class="plugin-count">0</span></span>]
[0]→slug:[plugins.php]title[インストール済みプラグイン]
[1]→slug:[plugin-install.php]title[プラグインを追加]
[70]slug[users.php]title[ユーザー]
[0]→slug:[users.php]title[ユーザー一覧]
[1]→slug:[user-new.php]title[ユーザーを追加]
[2]→slug:[profile.php]title[プロフィール]
[75]slug[tools.php]title[ツール]
[0]→slug:[tools.php]title[利用可能なツール]
[1]→slug:[import.php]title[インポート]
[2]→slug:[export.php]title[エクスポート]
[3]→slug:[site-health.php]title[サイトヘルス <span class="menu-counter site-health-counter count-0"><span class="count">0</span></span>]
[4]→slug:[export-personal-data.php]title[個人データのエクスポート]
[5]→slug:[erase-personal-data.php]title[個人データの消去]
[6]→slug:[theme-editor.php]title[テーマファイルエディター]
[7]→slug:[plugin-editor.php]title[プラグインファイルエディター]
[80]slug[options-general.php]title[設定]
[0]→slug:[options-general.php]title[一般]
[1]→slug:[options-writing.php]title[投稿設定]
[2]→slug:[options-reading.php]title[表示設定]
[3]→slug:[options-discussion.php]title[ディスカッション]
[4]→slug:[options-media.php]title[メディア]
[5]→slug:[options-permalink.php]title[パーマリンク]
[6]→slug:[options-privacy.php]title[プライバシー]
必要のないメニュー項目を非表示にする
メニュー項目の中には全く使わないものがあるかもしれません。あっても使わない項目はない方がすっきりしますし、余計なものがない方が使いやすいです。
またあまり知識のない人が、重要なところをうっかり変更して問題が出てしまった…なんていうことを未然に防ぐこともできます。
メニューの非表示には remove_menu_page() を使用します。引数にはファイル名を指定します。
function remove_admin_menu() {
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('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', 'remove_admin_menu');上記のコードのようにすべて設定するとメニュー欄に何もなくなります。

サブメニューの中の一つを非表示にしたい場合は remove_submenu_page() を使用します。
function remove_admin_submenu() {
remove_submenu_page('index.php', 'index.php'); // ホーム
remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=post_tag'); // 投稿のタグ
}
add_action( 'admin_menu', 'remove_admin_submenu' );unset() を使用して削除することもできます。このコードを利用する場合は引数にグローバル変数 $menu を使ってメニュー番号を指定します。
function remove_admin_menu() {
global $menu;
unset($menu[2]); // ダッシュボード
}
add_action('admin_menu', 'remove_admin_menu');サブメニューの場合は $submenu を使って、親メニューのスラッグとサブメニュー番号を指定します。
function remove_admin_submenu() {
global $submenu;
unset($submenu['plugins.php'][10]); // 新規プラグインを追加
unset($submenu['options-general.php'][40]); // パーマリンク
}
add_action('admin_menu', 'remove_admin_submenu');ユーザーごとに表示を切り替えたい場合は、条件分岐をつけます。
function custom_admin_menu() {
$user = wp_get_current_user();
$post_user = 'post_user_ID';
if($user->get('user_login') == $post_user) {
remove_menu_page('options-general.php'); // 「設定」メニュー
}
}
add_action('admin_menu', 'custom_admin_menu');ユーザーIDがわからない時はユーザーページで確認できます。
ユーザーページにアクセスすると、URLに「user_id=数字」があります。数字がユーザーIDです。

WordPressでは各ユーザーに「管理画面上で何ができるか」という権限を設定することができます。上記のようにコードを書くことによってメニュー項目を制限することもできますが、ユーザー登録の際に設定する権限によって制限させることもできます。
メニューのテキストを変更する
存在するメニューのテキストを変更するには、グローバル変数の $menu と $submenu を利用して設定します。それぞれにメニューに表示される内容が入っています。
メニュー名を変更する
メニュー名は任意のテキストに変更できます。例えばメニューにある「投稿」を「記事作成」という名前にしたい場合、以下のようなコードを追加することで変更されます。
function edit_admin_menu_text() {
global $menu, $submenu;
$menu[5][0] = '記事作成'; // 投稿
$submenu['edit.php'][5][0] = '記事一覧'; // 投稿一覧
$submenu['edit.php'][10][0] = '記事新規追加'; // 新規追加
$menu[10][0] = '画像追加';
}
add_action('admin_menu', 'edit_admin_menu_text');$menu[5][0] の [5] はメニュー番号、[0] で「投稿」といったテキストが格納されている場所を指定しています。$submenu はメニュー番号の前に、親メニューのphpファイル名を指定します。
配列の情報は、var_dump($menu); や var_dump($submenu); で確認できます。
メニューを並び替える
メニューの並び順を変更するには、 custom_menu_order と menu_order というフィルターフックを利用します。
並べ替える前の中身は var_dump($menu_order); で確認できます。こちらを元に並べたい順序でメニューを記述していきます。
例えば投稿やメディアをダッシュボードより前に表示させたい場合は以下のように記述します。
function my_menu_order($menu_order) {
return array(
'edit.php', // 投稿
'upload.php', // メディア
'index.php', // ダッシュボード
'edit.php?post_type=page', // 固定ページ
'edit-comments.php', // コメント
'separator1', // 区切り線1
'link-manager.php', // リンク
'users.php', // ユーザー
'separator2', // 区切り線2
'themes.php', // テーマ
'plugins.php', // プラグイン
'tools.php', // ツール
'options-general.php', // 設定
'separator-last', // 区切り線3
);
}
add_filter('custom_menu_order', '__return_true');
add_filter('menu_order', 'my_menu_order');add_filter('custom_menu_order', '__return_true'); でメニューの並び替えを有効にし、add_filter('menu_order', 'my_menu_order'); で変更した内容を反映させます。
この場合、メニューの上部2つを変えたいだけなので、全て書かずその部分だけでもOKです。
function my_menu_order($menu_order) {
return array(
'edit.php', // 投稿
'upload.php', // メディア
);
}
add_filter('custom_menu_order', '__return_true');
add_filter('menu_order', 'my_menu_order');独自メニューを追加する
メニューの追加
add_menu_page を使って独自のメニュー項目を作ることができます。
function custom_menu_page() {
add_menu_page('追加メニュー項目', '追加メニュー', 'manage_options', 'custom-menu-page', 'custom_menu_contents', 'dashicons-admin-generic', 100);
}
add_action('admin_menu', 'custom_menu_page');
function custom_menu_contents() {
$contents = <<<EOF
<div class="wrap">
<h1>追加メニューコンテンツ</h1>
<p>追加されたメニューです。</p>
</div>
EOF;
echo $contents;
}
add_menu_page() で設定する引数は以下のものです。
add_menu_page(
$page_title,
$menu_title,
$capability,
$menu_slug,
$function,
$icon_url,
$position,
);add_menu_page(
'追加メニュー項目',
'追加メニュー',
'manage_options',
'custom-menu-page',
'custom_menu_contents',
'dashicons-admin-generic',
100
);| $page_title | メニューページのタイトルタグのテキスト。 |
| $menu_title | サイドのメニューリストに表示されるテキスト。 |
| $capability | ユーザーに表示させるために必要な権限。 ここで設定した権限を持つユーザーに、メニューを表示させる。 |
| $menu_slug | メニューページのスラッグ。 |
| $function | ページコンテンツの出力関数。 |
| $icon_url | メニューテキストにつけるアイコン。 画像のURLやダッシュコンなどが使用可能。 |
| $position | 追加するメニューの表示位置。 数字が小さければ上部に、大きいほど下に表示される。 |
メニューのコンテンツ
メニューの画面を出力するのは先述した $function の部分です。表示させたい内容をHTMLで作成していきます。
設定を保存できるようにするにはformタグでマークアップし、submit_button() を設置します。
【参考】【WordPress】管理画面に独自の設定画面を追加する方法 – よしあかつきのメモ帳
サブメニューの追加
メニューに階層を作る場合は add_submenu_page を使用します。設定する引数は以下のものです。
add_submenu_page(
$parent_slug,
$page_title,
$menu_title,
$capability,
$menu_slug,
$function,
); add_submenu_page を利用して投稿や固定ページなどデフォルトのメニューの中に独自メニューを追加することもできます。$parent_slug に既存のメニューを指定することでその中に追加されます。





