WordPressの管理画面からメニューを非表示にする方法

クライアントのWordPress管理画面において、とくにweb知識が少ない方などのために、さわってしまうとサイトの表示や機能に変更を加えてしまう部分を非表示にしておくことがある。

functions.phpを操作するので備忘録として残す。

あくまでも非表示にしているので、メニュー項目のURLを直打ちしたらアクセスはできることに注意。

サイドバーのメニューを非表示

管理画面の左側サイドバーのメニューで、とくに「テーマファイルエディタ」などを間違っていじってしまうと面倒なことになる。

WordPressに慣れていないクライアントにとっても、メニュー項目が多いと操作に迷うので、極力シンプルな管理画面で納品するとお互いに安心だ。

admin_menuのアクション内でremove_menu_pageを指定すれば非表示になる。

PHP
function remove_menus() {

		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' ); // 設定.
}
add_action( 'admin_menu', 'remove_menus', 999 );

各メニューの子メニュー(サブメニュー)の指定コードがremove_submenu_pageだ。特定のサブメニューのみ非表示にする場合に使用する。

PHP
function remove_menus() {

		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( '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', 'customize.php?return=' . rawurlencode( $_SERVER['REQUEST_URI'] ) ); // 外観 / カスタマイズ.
		remove_submenu_page( 'themes.php', 'nav-menus.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( 'tools.php', 'site-health.php' ); // ツール / サイトヘルス.
		remove_submenu_page( 'tools.php', 'export_personal_data' ); // ツール / 個人データのエクスポート.
		remove_submenu_page( 'tools.php', 'remove_personal_data' ); // ツール / 個人データの消去.

		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-permalink.php' ); // 設定 / メディア.
		remove_submenu_page( 'options-general.php', 'privacy.php' ); // 設定 / プライバシー.
}
add_action( 'admin_menu', 'remove_menus', 999 );

function my_setup() {
	remove_theme_support( 'custom-header' );// 外観 / ヘッダー.
	remove_theme_support( 'custom-background' );// 外観 / 背景.
}
add_action( 'after_setup_theme', 'my_setup' );

一部メジャーなプラグインによって生成されるメニューについては、トップレベルのメニューのaを確認してremove_menu_pageを指定する。

アドミンバーのメニューを非表示

管理画面上部のメニューで、基本的に「サイト名」と「ダッシュボード」さえ残しておけば問題ないと思う。

PHP
function remove_admin_bar_menus( $wp_admin_bar ) {

	$wp_admin_bar->remove_menu( 'my-account' ); // こんにちは、[ユーザー名]さん.
	$wp_admin_bar->remove_menu( 'user-info' ); // ユーザー / [ユーザー名].
	$wp_admin_bar->remove_menu( 'edit-profile' ); // ユーザー / プロフィールを編集.
	$wp_admin_bar->remove_menu( 'logout' ); // ユーザー / ログアウト.

	$wp_admin_bar->remove_menu( 'wp-logo' ); // WordPressロゴ.
	$wp_admin_bar->remove_menu( 'about' ); // WordPressロゴ / WordPressについて.
	$wp_admin_bar->remove_menu( 'wporg' ); // WordPressロゴ / WordPress.org.
	$wp_admin_bar->remove_menu( 'documentation' ); // WordPressロゴ / ドキュメンテーション.
	$wp_admin_bar->remove_menu( 'support-forums' ); // WordPressロゴ / サポート.
	$wp_admin_bar->remove_menu( 'feedback' ); // WordPressロゴ / フィードバック.

	$wp_admin_bar->remove_menu( 'site-name' ); // サイト名.
	$wp_admin_bar->remove_menu( 'view-site' ); // サイト名 / サイトを表示.

	$wp_admin_bar->remove_menu( 'updates' ); // 更新.

	$wp_admin_bar->remove_menu( 'comments' ); // コメント.

	$wp_admin_bar->remove_menu( 'new-content' ); // 新規投稿.
	$wp_admin_bar->remove_menu( 'new-post' ); // 新規投稿 / 投稿.
	$wp_admin_bar->remove_menu( 'new-media' ); // 新規投稿 / メディア.
	$wp_admin_bar->remove_menu( 'new-page' ); // 新規投稿 / 固定.
	$wp_admin_bar->remove_menu( 'new-user' ); // 新規投稿 / ユーザー.

	$wp_admin_bar->remove_menu( 'menu-toggle' ); // メニュー.
}
add_action( 'admin_bar_menu', 'remove_admin_bar_menus', 999 );

権限に応じて表示・非表示を切り替える

サイト管理者や編集者などの権限に応じてメニューの表示を切り替える条件分岐も可能。current_user_can関数を用いて現ユーザー権限を確認。

下記のコードで、例えば「編集者の場合「設定」を消す」という書き方ができるようになる。

PHP
	if ( current_user_can( 'administrator' ) ) {
		// 管理者の場合
	} elseif ( current_user_can( 'editor' ) ) {
		// 編集者の場合
	} elseif ( current_user_can( 'author' ) ) {
		// 投稿者の場合
	} elseif ( current_user_can( 'contributor' ) ) {
		// 寄稿者の場合
	} elseif ( current_user_can( 'subscriber' ) ) {
		// 購読者の場合
	}
current_user_canの引数
  • 管理者:administrator
  • 編集者:editor
  • 投稿者:author
  • 寄稿者:contributor
  • 購読者:subscriber