
WordPressの管理画面の左側に表示されるメニュー項目のカスタマイズメモです。

各メニューの表示番号やスラッグ
メニュー項目をカスタマイズする際に必要になるのが、メニューに付けられている番号やスラッグの情報です。
既存メニューの番号が分からないと思った通りの位置に追加することができず、スラッグが分からないとそのメニューの変更ができません。確認できるようにしておくと実装がスムーズに進みます。
以下のサイトで確認する方法を参考にさせていただきました。
【WordPress】管理画面の各メニュー項目の表示位置(番号)・スラッグを確認する。 | けーちゃんのプログラム開発ノート
【表示番号やスラッグを確認、出力されたコード】(WordPressバージョン6.4.2で確認)
[2]slug[index.php]title[ダッシュボード] [0]→slug:[index.php]title[ホーム] [10]→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[投稿] [5]→slug:[edit.php]title[投稿一覧] [10]→slug:[post-new.php]title[新規投稿を追加] [15]→slug:[edit-tags.php?taxonomy=category]title[カテゴリー] [16]→slug:[edit-tags.php?taxonomy=post_tag]title[タグ] [10]slug[upload.php]title[メディア] [5]→slug:[upload.php]title[ライブラリ] [10]→slug:[media-new.php]title[新しいメディアファイルを追加] [20]slug[edit.php?post_type=page]title[固定ページ] [5]→slug:[edit.php?post_type=page]title[固定ページ一覧] [10]→slug:[post-new.php?post_type=page]title[新規固定ページを追加] [59]slug[separator2]title[] [60]slug[themes.php]title[外観] [5]→slug:[themes.php]title[テーマ <span class="update-plugins count-0"><span class="theme-count">0</span></span>] [6]→slug:[customize.php?return=%2Fwp-admin%2Fadmin.php%3Fpage%3Dcheck-main-menu]title[カスタマイズ] [7]→slug:[widgets.php]title[ウィジェット] [10]→slug:[nav-menus.php]title[メニュー] [11]→slug:[theme-editor.php]title[テーマファイルエディター] [65]slug[plugins.php]title[プラグイン <span class="update-plugins count-0"><span class="plugin-count">0</span></span>] [5]→slug:[plugins.php]title[インストール済みプラグイン] [10]→slug:[plugin-install.php]title[新規プラグインを追加] [15]→slug:[plugin-editor.php]title[プラグインファイルエディター] [70]slug[users.php]title[ユーザー] [5]→slug:[users.php]title[ユーザー一覧] [10]→slug:[user-new.php]title[新規ユーザーを追加] [15]→slug:[profile.php]title[プロフィール] [75]slug[tools.php]title[ツール] [5]→slug:[tools.php]title[利用可能なツール] [10]→slug:[import.php]title[インポート] [15]→slug:[export.php]title[エクスポート] [20]→slug:[site-health.php]title[サイトヘルス <span class="menu-counter site-health-counter count-0"><span class="count">0</span></span>] [25]→slug:[export-personal-data.php]title[個人データのエクスポート] [30]→slug:[erase-personal-data.php]title[個人データの消去] [80]slug[options-general.php]title[設定] [10]→slug:[options-general.php]title[一般] [15]→slug:[options-writing.php]title[投稿設定] [20]→slug:[options-reading.php]title[表示設定] [25]→slug:[options-discussion.php]title[ディスカッション] [30]→slug:[options-media.php]title[メディア] [40]→slug:[options-permalink.php]title[パーマリンク] [45]→slug:[options-privacy.php]title[プライバシー] [99]slug[separator-last]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にID番号があるのでそちらを確認してください。「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('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_text', 'dashicons-admin-generic', 100);
}
add_menu_page()
で設定する引数は以下のものです。
add_menu_page(
$page_title,
$menu_title,
$capability,
$menu_slug,
$function,
$icon_url,
$position
);
$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
に既存のメニューを指定することでその中に追加されます。