WordPressでサイトネットワーク管理画面のメニューを削除

管理メニューの削除方法はシングルサイトとマルチサイトで少し異なる

マルチサイトの管理画面ではadmin_initでhookする

wordpressのマルチサイト環境下で、サイト管理者にテーマの管理を委任しようと考えている。

各サイト管理者に一時的に特権管理者権限を付与し、サイトネットワーク管理画面にアクセスしてテーマの追加や編集を行ってもらうという方法になる。しかし、特権管理者権限である

  • サイトの追加
  • プラグインの追加

などのそのほかの操作をさせたくない。そのための準備として管理メニューの非表示と禁止したいメニューへのダイレクトなアクセスに404エラーを返すようにしておく。シングルサイト構成の場合は、remove_menu_pageで削除したメニューへのアクセスに404エラーを返すの内容で管理メニューのカスタマイズが可能だが、サイトネットワーク管理画面の場合はフックする場所が異なる。具体的には以下のようにhookする

add_action('admin_menu', array($this, 'remove_menus'));
add_action('admin_init', array($this, 'remove_menus_mu'));

admin_menuでは、マルチサイトの管理メニューは制御できない。フックする順番としてはadmin_initのほうが後になるが、上の方法でシングルサイトの管理メニューとマルチサイトのメニューを制御できる。

remove_menus_mu内では以下のようにしてみた。

$data[] = remove_menu_page('index.php');
$data[] = remove_menu_page('sites.php');
$data[] = remove_menu_page('users.php');
$data[] = remove_menu_page('plugins.php');
$data[] = remove_menu_page('settings.php');
$data[] = remove_menu_page('update-core.php');

$data[] = remove_submenu_page('sites.php', 'site-new.php');
$data[] = remove_submenu_page('users.php', 'user-new.php');
$data[] = remove_submenu_page('plugins.php', 'plugin-install.php');
$data[] = remove_submenu_page('plugins.php', 'plugin-editor.php');
$data[] = remove_submenu_page('setting.php', 'setup.php');
$data[] = remove_submenu_page('update-core', 'upgrade.php');

テーマ関連のメニュー以外を非表示にしている。シングルサイトの場合と中身は同じ要領で対応できる。404エラーをレスポンスする方法については、remove_menu_pageで削除したメニューへのアクセスに404エラーを返すを参考にしてほしい。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WordPressでサイトネットワーク管理画面のメニューを削除の記事にコメントを投稿

カスタマイズ