管理メニューの削除方法はシングルサイトとマルチサイトで少し異なる
マルチサイトの管理画面では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エラーを返すを参考にしてほしい。