WordPress の管理画面のメニュー項目を非表示にする

WordPress の管理画面のメニュー項目を非表示にする

今回もちょっとした小ネタで。

この UCWD-Studio. では 2.7 くらいのバージョンから WordPress を利用していまして、その頃には現在は使われていない「リンク」というメニューが管理画面にありました。で、その頃の WordPress をアップデートし続けてると「リンク」というメニューが管理画面に残り続けるのですね。

メニューが残っていること自体は別に害があるわけではないのですが、使ってないメニューでもあるので外してしまいたい && とはいえそのためだけにプラグインを入れるのはちょっと抵抗があるなぁ……という時の functions.php のカスタマイズをまとめておきます。

今回非表示する管理画面メニューの項目を整理

今回はこのサイトを運営するにおいて使うことのない2つのメニューを消してみます。まとめると以下の通りです。

  1. まず「リンク」をメニューから非表示にしたい
  2. 「ツール」のサブメニュー1番目にある「利用可能なツール」を非表示にしたい

管理画面のトップレベルメニューを取り除く

管理画面の任意のトップレベルメニューを非表示にする方法を検索すると

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

といった感じで、あらかじめグローバル変数 $menu の配列の内容を調べて、対応するメニュー項目を unset する方法がよく紹介されていますが、
remove_menu_page() で同じことが実現できます。

WordPress Codex のページの使い方には

使い方

<?php remove_menu_page( $menu_slug ) ?>

パラメータ

$menu_slug
文字列) (必須) メニューのスラッグ (典型的には、メニューアイテムの PHP スクリプト名。例: edit-comments.php)

初期値: なし

とあり、「メニューのスラッグ? ……ってなに?」となりやすいわけですが、すごい端的にはメニューのリンク先を指定します。具体的にはメニューにマウスが乗った際、ステータスバー(などに)リンク先が表示されます。例えば「リンク」の場合だと http://example.com/wp-admin/link-manager.php とリンク先が表示されるわけですが、この内 wp-admin/ 以下の link-manger.php がメニューのスラッグに相当します。なので、

function hide_admin_menus () {
    remove_menu_page('link-manager.php');
}
add_action('admin_menu', 'hide_admin_menus');

で管理画面の「リンク」というメニューを非表示にできます。

管理画面のサブメニュー項目を取り除く

同じように管理画面のサブメニュー項目を取り除くには、remove_submenu_page() を利用します。

Usage


<?php remove_submenu_page$menu_slug$submenu_slug ); ?>

Parameters

$menu_slug
(string) (required) The slug for the parent menu

Default: None
$submenu_slug
(string) (required) The slug of the submenu

Default: None

とあるように、remove_submenu_page() は引数が2つ必要で、1つめは remove_menu_page() と同じように、そのサブメニューが属すトップレベルメニュー項目のメニューのスラッグをセットし、2つめはサブレベルメニュー項目のメニューのスラッグとなります。

サブレベルメニュー項目のメニューのスラッグはトップレベルメニュー項目のメニューのスラッグの場合と同様、非表示としたいサブメニューの項目のリンク先の内、wp-admin/ 以下の部分となります。

さて、今回サブレベルメニュー項目で非表示としたい「ツール > 利用可能なツール」はトップレベルメニューとなる「ツール」と同じリンク先で、メニューのスラッグはともに tools.php となります。が、上記引用のように remove_submenu_page() の2つの引数はともに必須項目となっているので、今回の場合はそれぞれ tools.php を設定します。

function hide_admin_menus () {
    remove_submenu_page('tools.php', 'tools.php');
}
add_action('admin_menu', 'hide_admin_menus');

これで「ツール > 利用可能なツール」のサブメニュー項目を非表示にできます。

今回はトップレベルメニュー項目の「リンク」とサブレベルメニュー項目の「ツール > 利用可能なツール」の両方を非表示としたいので

function hide_admin_menus () {
    remove_menu_page('link-manager.php');
    remove_submenu_page('tools.php', 'tools.php');
}
add_action('admin_menu', 'hide_admin_menus');

注意点

remove_menu_page() でも remove_submenu_page() でも書かれていることなのですが、飽くまで管理画面のグローバルメニューから項目を非表示にするだけなので、ユーザーが直接アクセスするのを防止するものではない という点には注意が必要です。

ですので、ユーザによってアクセスできる管理画面機能を制限したい場合はユーザー権限を適切に設定する必要があります。これは本ページ冒頭で紹介した unset() で項目を非表示にする場合でも同様です。

参照URL