管理画面のサイドメニューを非表示にする

管理画面のサイドメニューを非表示にする

管理画面のサイドメニューを、管理者権限やログイン名によって非表示にします。
非表示にするだけなのでURLを直接入力した場合はページを表示できます。

remove_menu_page()

使い方

<?php remove_menu_page( $menu_slug ) ?>

サンプル

function wpqw_hide_admin_menus() {
	// 全ユーザー権限で非表示にしたい場合。ここに書きます。
	remove_menu_page( 'edit-comments.php' ); // コメント
	remove_menu_page( 'users.php' ); // ユーザー
	if ( ! current_user_can( 'administrator' ) ) {
		// 管理者以外の権限で非表示にしたい場合ここに書きます。
		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( 'themes.php' ); // 外観
		remove_menu_page( 'plugins.php' ); // プラグイン
		remove_menu_page( 'profile.php' ); // プロフィール
		remove_menu_page( 'tools.php' ); // ツール
		remove_menu_page( 'options-general.php' ); // 設定
	}
}
add_action( 'admin_menu', 'wpqw_hide_admin_menus' );

元の仕様で、ユーザーは管理者ログインの際に表示され、プロフィールは管理者以外でログイン時に表示されます。

その他のメニューを非表示にする方法

MW WP Formを非表示にする方法

remove_menu_page( 'edit.php?post_type=mw-wp-form' );

Contact Form7を非表示にする方法

remove_menu_page( 'wpcf7' );

remove_submenu_page()

サイドメニューの中のサブメニューを非表示にする方法です。

使い方

<?php remove_submenu_page( $menu_slug, $submenu_slug ) ?>

サンプル

function wpqw_hide_admin_submenus() {
	// ダッシュボード
	remove_submenu_page( 'index.php', 'index.php' ); // ホーム
	remove_submenu_page( 'index.php', 'update-core.php' ); // 更新

	// 外観
	remove_submenu_page( 'themes.php', 'themes.php' ); // テーマ
	remove_submenu_page( 'themes.php', 'widgets.php' ); // ウィジェット
	remove_submenu_page( 'themes.php', 'nav-menus.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' ); // プラグイン編集

	if( ! current_user_can( 'administrator' ) ) {
		// 投稿
		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', 'post-new.php?post_type=page' ); // 固定ページ一覧
		remove_submenu_page( 'edit.php?post_type=page', 'post-new.php?post_type=page' ); // 新規追加
	}
}
add_action( 'admin_menu', 'wpqw_hide_admin_submenus' );

unset()

unset()でも非表示に出来ますが、remove_menu_page()の方が分かりやすいため、最近はあまり使わなくなりました。

function wpqw_hide_admin_menus() {
	if( ! current_user_can( 'administrator' ) ) {
		global $menu;
		unset( $menu[2] );	// ダッシュボード
		unset( $menu[5] );	// 投稿
		unset( $menu[10] );	// メディア
		unset( $menu[20] );	// 固定ページ
		unset( $menu[25] );	// コメント
		unset( $menu[60] );	// 外観
		unset( $menu[65] );	// プラグイン
		unset( $menu[70] );	// ユーザー
		unset( $menu[75] );	// ツール
		unset( $menu[80] );	// 設定
	}
}
add_action( 'admin_menu', 'wpqw_hide_admin_menus' );

ユーザー名で判断する

クライアントワークにおいて、制作会社とクライアントで管理者がいて、クライアントの管理者に一部のメニューを制限したい場合・・・

権限による分岐

ここまでのサンプルはユーザー権限によって分岐してきました。

if( ! current_user_can( 'administrator' ) ) {
	//管理者以外の場合
}

ログイン名による分岐

2行目の “username” に制作会社IDを指定する事で、制作会社ID以外の場合に適用されます。

$user = wp_get_current_user();
if ( ! ( $user->user_login == 'username' ) ) {
	//指定したユーザー名以外の場合の処理
}

Codex