@ WordPress

管理メニューの操作

remove_menu_page()

admin_menu フックを使って、remove_menu_page() 関数で管理ニューを削除することができます。

トップレベルメニューの削除

トップベルメニューを削除したい場合は、$menuを使います。

functions.php

/* トップレベルメニューを削除 */
add_action('admin_menu', 'remove_menu');
function remove_menu() {
	global $menu;
	// remove_menu_pageで削除にするメニューを指定
	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' );        // 設定
}

サブレベルメニューの削除

サブレベルメニューを削除したい場合は、$submenuを使います。

functions.php

/* 投稿メニューのサブレベルメニュー「投稿一覧」を削除 */
function remove_menus () {
	global $submenu;
	remove_submenu_page('edit.php', 'post-new.php');
}
add_action('admin_menu', 'remove_menus');

var_dump($submenu) で $submmenu の型や値を含む構造化された情報を出力できます。

function remove_menus () {
	global $submenu;
	var_dump($submenu);
}
add_action('admin_menu', 'remove_menus');

WordPress Codex:関数リファレンス/remove menu page

unset()

remove_menu_page() 関数と同じように、unset() 関数を使って、管理メニューを削除することができます。

トップレベルメニューの削除

トップベルメニューを削除したい場合は、$menuを使います。

functions.php

/* トップレベルメニューを削除 */
function remove_menus () {
	global $menu;
	unset($menu[2]);  // ダッシュボード
	unset($menu[4]);  // メニューの線1
	unset($menu[5]);  // 投稿
	unset($menu[10]); // メディア
	unset($menu[15]); // リンク
	unset($menu[20]); // ページ
	unset($menu[25]); // コメント
	unset($menu[59]); // メニューの線2
	unset($menu[60]); // テーマ
	unset($menu[65]); // プラグイン
	unset($menu[70]); // プロフィール
	unset($menu[75]); // ツール
	unset($menu[80]); // 設定
	unset($menu[90]); // メニューの線3
	
add_action('admin_menu', 'remove_menus');

サブレベルメニューを削除

サブレベルメニューを削除したい場合は、$submenuを使います。

functions.php

/* 投稿メニューのサブレベルメニュー「新規追加」を削除 */
function remove_menus () {
	global $submenu;
	unset($submenu['edit.php'][10]);
}
add_action('admin_menu', 'remove_menus');

プラグインメニューの削除

プラグインのメニューを削除する場合は、var_dump($menu) で $menu の情報を出力して、対象となるプラグインのメニューのスラッグまたは、プラグインのメニューの配列インデックスを調べます。

functions.php

function remove_menus () {
	global $menu;
	var_dump($menu);
}
add_action('admin_menu', 'remove_menus');

remove_menu_page() を使って remove_menu_page(メニューのスラッグ) でメニューを削除します。

例えば、Contact Form 7 のメニューを削除知する場合は、remove_menu_page() で functions.php に次のように記述します。

functions.php

function remove_menus () {
	global $menu;
	remove_menu_page('wpcf7');
}
add_action('admin_menu', 'remove_menus');

unset() を使う場合は、unset($menu[メニューの配列インデックス]) としてメニューを削除します。

functions.php

function remove_menus () {
	global $menu;
	unset($menu[26]);
}
add_action('admin_menu', 'remove_menus');

ユーザレベルによるメニューの表示設定

ユーザレベルによるメニューの表示設定も可能です。

ユーザレベルの既定値は、管理者 = 10 編集者 = 7 投稿者 = 2 寄稿者 = 1 購読者 = 0 となっています。

下記ソースコードは、ユーザレベル 10 以下のユーザの場合に指定したメニューを非表示にする例です。

functions.php

/* 権限別メニュー非表示 */
add_action('admin_menu', 'remove_menu');
function remove_menu() {
	if (!current_user_can('level_10')) { //level10以下のユーザの場合メニューをunsetする
		global $menu;
		// unsetで非表示にするメニューを指定
		unset($menu[65]);       // プラグイン
		unset($menu[70]);       // ユーザー
		unset($menu[75]);       // ツール
		unset($menu[80]);       // 設定
	}
}

メニュー項目名の変更

メニュー項目名を変更するには、admin_menu フックを使って、メニュー項目名を設定します。

functions.php

/* メニュー項目名を変更 */
add_action('admin_menu', 'change_post_menu_label');
function change_post_menu_label() {
	global $menu;
	global $submenu;
	$menu[5][0] = 'ブログ'; // 「投稿」を「ブログ」に変更
	$submenu['edit.php'][5][0] = 'ブログ一覧'; // 「投稿一覧」を「ブログ一覧」に変更
}

WordPress Codex:管理メニューの追加