管理画面のサイドメニューを、管理者権限やログイン名によって非表示にします。
非表示にするだけなので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' ) ) {
//指定したユーザー名以外の場合の処理
}