functions.phpによる管理画面の左メニューカスタマイズ|wordpress

管理画面の左メニューのカスタマイズについて調べていたら、見やすいページがあったのでメモ。

Customizing Your WordPress Admin

英語ですが、タイトル部分は理解できるので、あとはソースを見れば使えます。functions.phpにペタっと貼って、自分用に詳細を書き直すだけでOKです。

Renaming Menus

左メニューに元からあるメニューの名称を変更できます。

function edit_admin_menus() {  
	global $menu;
	global $submenu;
 
	$menu[5][0] = 'その他'; // '投稿'を'その他'に変更
	$submenu['edit.php'][5][0] = '投稿一覧'を'その他一覧'へ変更;
}  
add_action( 'admin_menu', 'edit_admin_menus' ); 

$menu[5][0]は、$menuというオブジェクトに格納された5番目の項目の0番目の要素を指定しています。
5番目の項目は「投稿」0番目の要素は「名称」ですので、上記ソースでは「投稿」の「名称」に、新しい値の「その他」を代入しています。

$submenu[‘edit.php’][5][0]は、「edit.php」以下のサブメニューのうち、5番目の項目の0番目の要素を指定しています。この場合はURLがキーとなるらしく、$submenu[20][5][0]では反応しませんでした。

使いどころですが、僕の場合は、基本のコンテンツは全てカスタム投稿で投稿を行い、新着情報やお知らせなど時系列にリスト表示するもののみ普通の投稿で扱う、といった作り方をした際に、クライアントが混乱しないように投稿を「その他」という名称に変更しました。

ちなみに何が何番目に入っているか、というのはページ末尾に一覧がまとめられています。詳細は、実際にあちらのページをご覧ください。

Changing the Menu Order

メニューの表示順を変更します。これはソースまんまですね。

function custom_menu_order($menu_ord) {
	if (!$menu_ord) return true;
	
	return array(
		'index.php', // ダッシュボード
		'separator1', // 最初の区切り線
		'edit.php', // 投稿
		'upload.php', // メディア
		'link-manager.php', // リンク
		'edit.php?post_type=page', // 固定ページ
		'edit-comments.php', // コメント
		'separator2', // 二つ目の区切り線
		'themes.php', // 外観
		'plugins.php', // プラグイン
		'users.php', // ユーザー
		'tools.php', // ツール
		'options-general.php', // 設定
		'separator-last', // 最後の区切り線
	);
}
add_filter('custom_menu_order', 'custom_menu_order'); // Activate custom_menu_order
add_filter('menu_order', 'custom_menu_order');

上記のreturn arrayの中の並びを変えれば、メニューの配置が変わります。カスタム投稿などのメニューが加わっている場合は、同様の扱いで順番を変更できます。メニューの項目は上記の通りURLで指定します。例えば、カスタム投稿「企業(company)」が加わっている場合は、下記の一文をどこかに挿入することで、そこに「企業」メニューが差し込まれます。

		'edit.php?post_type=company', // 企業

Removing Menus

指定の項目を非表示にします。
以下の表記を上記のfunctionのどこかに入れておくだけでOKです。
この場合もurlがキーとなるようで、例では「ツール」と「外観」の中の「テーマ編集」の項目を非表示にしています。

remove_menu_page('tools.php');//メインメニューの場合
remove_submenu_page('themes.php','theme-editor.php');//サブメニューの場合

任意の項目を追加

最後におまけですが、任意の項目をメニューに追加する方法です。
これは出典がどこか忘れてしまいました・・・申し訳ない。

例は、プラグインのカスタムフィールドテンプレートを追加した際、デフォルトだと編集画面へのリンクがメインメニューの「設定」のサブ項目に埋もれてしまうので、ワンクリックで移動できるようにメインメニューに追加しています。

使用の際は、test_menu_pageとadd_menu_pageの各値をいじってもらえばOKだと思います。

function test_menu_page() {
    $siteurl = 'options-general.php?page=custom-field-template.php';
}
function test_admin_menu() {
    add_menu_page( 'カスタム', 'カスタム', 'read', 'options-general.php?page=custom-field-template.php');
}
add_action( 'admin_menu', 'test_admin_menu' );

以上、メモでした。