[WordPress] 管理画面の不要なメニュー項目を削除する

環境

  • WordPress 3.4.1

メニュー項目を削除する

remove_menu_pageという関数を使います。この関数は/wp-admin/includes/plugin.phpに書かれています。

/wp-admin/includes/plugin.php の 1283 行目

function remove_menu_page( $menu_slug ) {
	global $menu;

	foreach ( $menu as $i => $item ) {
		if ( $menu_slug == $item[2] ) {
			unset( $menu[$i] );
			return $item;
		}
	}

	return false;
}

引数としてメニュースラッグを渡して一致するものを削除しているようです。$menu の中身を見てみると以下のようになっていました。

array(14) {
  [2]=>
  array(7) {
    [0]=>
    string(21) "ダッシュボード"
    [1]=>
    string(4) "read"
    [2]=>
    string(9) "index.php"
    [3]=>
    string(0) ""
    [4]=>
    string(43) "menu-top menu-top-first menu-icon-dashboard"
    [5]=>
    string(14) "menu-dashboard"
    [6]=>
    string(3) "div"
  }
…略

メニュースラッグと [2] の値を比較しているので、index.php を渡すと、メニュー項目の「ダッシュボード」を消せます。index.php はリンク先なので他のメニュー項目もリンク先を渡すことで同様に消せます。

アクションフックの場所

アクションフックはadmin_menuが使えそうです。これは管理画面メニューの基本構造が配置された後に実行されます。/wp-admin/includes/menu.phpの 97 行目に書かれています。

※マルチサイトの場合は admin_menu ではありません。

テーマの functions.php

プラグインなどでメニュー項目が追加されていない状態から全てのメニュー項目を削除してみます。

function remove_menus() {
	remove_menu_page('index.php'); // ダッシュボード
	remove_menu_page('separator1'); // セパレータ1
	remove_menu_page('edit.php'); // 投稿
	remove_menu_page('upload.php'); // メディア
	remove_menu_page('link-manager.php'); // リンク
	remove_menu_page('edit.php?post_type=page'); // 固定ページ
	remove_menu_page('edit-comments.php'); // コメント
	remove_menu_page('separator2'); // セパレータ1
	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'); // 設定
	remove_menu_page('profile.php'); // プロフィール(管理者以外のユーザー用)
}
add_action('admin_menu', 'remove_menus');

サブメニュー項目を削除する

remove_submenu_pageという関数を使います。この

この関数は/wp-admin/includes/plugin.phpに書かれています。

/wp-admin/includes/plugin.php の 1305 行目

function remove_submenu_page( $menu_slug, $submenu_slug ) {
	global $submenu;

	if ( !isset( $submenu[$menu_slug] ) )
		return false;

	foreach ( $submenu[$menu_slug] as $i => $item ) {
		if ( $submenu_slug == $item[2] ) {
			unset( $submenu[$menu_slug][$i] );
			return $item;
		}
	}

	return false;
}

引数としてメニュースラッグとサブメニューのスラッグを渡して、一致するものを削除しているようです。$submenu の中身を見てみると以下のようになっていました。

array(11) {
  ["index.php"]=>
  array(2) {
    [0]=>
    array(3) {
      [0]=>
      string(9) "ホーム"
      [1]=>
      string(4) "read"
      [2]=>
      string(9) "index.php"
    }
    [10]=>
    array(3) {
      [0]=>
      string(95) "更新 <span class='update-plugins count-0' title=''><span class='update-count'>0</span></span>"
      [1]=>
      string(11) "update_core"
      [2]=>
      string(15) "update-core.php"
    }
  }
…略

メニュースラッグとして index.php、サブメニュースラッグとして index.php を渡せば「ホーム」が消えます。サブメニュースラッグとして update-core.php を渡せば「更新」が消えます。親のリンク先と子のリンク先を渡すと消せるということですね。

テーマの functions.php

プラグインなどでメニュー項目が追加されていない状態から全てのサブメニュー項目を削除してみます。

function remove_submenus() {
	remove_submenu_page('index.php', 'index.php'); // ダッシュボード -> ホーム
	remove_submenu_page('index.php', 'update-core.php'); // ダッシュボード -> 更新
	remove_submenu_page('edit.php', 'edit.php'); // 投稿 -> 投稿一覧
	remove_submenu_page('edit.php', 'post-new.php'); // 投稿 -> 新規追加
	remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=category'); // 投稿 -> カテゴリ
	remove_submenu_page('edit.php', 'edit-tags.php?taxonomy=post_tag'); // 投稿 -> タグ
	remove_submenu_page('upload.php', 'upload.php'); // メディア -> ライブラリ
	remove_submenu_page('upload.php', 'media-new.php'); // メディア -> 新規追加
	remove_submenu_page('link-manager.php', 'link-manager.php'); // リンク -> すべてのリンク
	remove_submenu_page('link-manager.php', 'link-add.php'); // リンク -> 新規追加
	remove_submenu_page('link-manager.php', 'edit-tags.php?taxonomy=link_category'); // リンク -> リンクカテゴリー
	remove_submenu_page('edit.php?post_type=page', 'edit.php?post_type=page'); // 固定ページ -> 固定ページ一覧
	remove_submenu_page('edit.php?post_type=page', 'post-new.php?post_type=page'); // 固定ページ -> 新規追加
	remove_submenu_page('themes.php', 'themes.php'); // 外観 -> テーマ
	remove_submenu_page('themes.php', 'widgets.php'); // 外観 -> ウィジェット
	remove_submenu_page('themes.php', 'theme-editor.php'); // 外観 -> テーマ編集
	remove_submenu_page('plugins.php', 'plugins.php'); // プラグイン -> インストール済みプラグイン
	remove_submenu_page('plugins.php', 'plugin-install.php'); // プラグイン -> 新規追加
	remove_submenu_page('plugins.php', 'plugin-editor.php'); // プラグイン -> プラグイン編集
	remove_submenu_page('users.php', 'users.php'); // ユーザー -> ユーザー一覧
	remove_submenu_page('users.php', 'user-new.php'); // ユーザー -> 新規追加
	remove_submenu_page('users.php', 'profile.php'); // ユーザー -> プロフィール
	remove_submenu_page('tools.php', 'tools.php'); // ツール -> 利用可能なツール
	remove_submenu_page('tools.php', 'import.php'); // ツール -> インポート
	remove_submenu_page('tools.php', 'export.php'); // ツール -> エクスポート
	remove_submenu_page('options-general.php', 'options-general.php'); // 設定 -> 一般
	remove_submenu_page('options-general.php', 'options-writing.php'); // 設定 -> 投稿設定
	remove_submenu_page('options-general.php', 'options-reading.php'); // 設定 -> 表示設定
	remove_submenu_page('options-general.php', 'options-discussion.php'); // 設定 -> ディスカッション
	remove_submenu_page('options-general.php', 'options-media.php'); // 設定 -> メディア
	remove_submenu_page('options-general.php', 'options-privacy.php'); // 設定 -> プライバシー
	remove_submenu_page('options-general.php', 'options-permalink.php'); // 設定 -> パーマリンク設定
}
add_action('admin_menu', 'remove_submenus', 102);

「テーマ編集」が重要度 101 で追加されているので、102 にしています。また、「外観 -> ヘッダー」と「外観 -> 背景」はリンク先の themes.php?page=○○○ の ○○○ 部分のみを指定しています。ここだけちょっと違いました。まぁ、リンク先入れて消えなかったら $submenu を覗くということで…。

参考

Trackbacks & Pingbacks

  • None

Comments

  • No Comment
Name
Mail(任意) 公開されません
Web Site(任意)
Comment

日本語が含まれない投稿は無視されますのでご注意ください