【WordPress】管理画面のメニューをユーザー権限に応じて消す方法

「WordPress管理画面のメニューを非表示にしたい」
「メニューを管理者以外に触らせたくない」
このような方向けに。
WordPress管理画面で特定のメニューを非表示にしたり、ユーザーの権限レベルに応じて表示を切り替える方法をご紹介します。
WordPress管理画面のメニューを消す方法
WordPress管理画面のメニューには「サイドメニュー」と「アドミンバー」の2つのメニューエリアがありますが、それぞれの消し方をご紹介します。
※function.php
を編集していきます。
サイドバーのメニューを消す方法
サイドバーのメニューを消すには、admin_menu
フックを利用します。
削除したいメニューをremove_menu_page('メニュー名')
で指定します。
function remove_admin_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_admin_menus', 999 );
サブメニューだけ消したい場合
特定のサブメニューだけ消したい場合は、remove_submenu_page('メニュー名','サブメニュー名')
を使います。
function remove_admin_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_admin_menus', 999 );
プラグインによって作成されるメニューを消したい場合
プラグインによって作成されるメニューを消すには、トップレベルのメニューのa
を確認すれば分かります。
admin.php?page=
のリンクの場合はpage=
以降の値がメニューのスラッグになるのでこちらを指定してあげてください。
function remove_admin_menus() {
remove_menu_page( 'wpcf7' ); // Contact Form 7.
remove_menu_page( 'edit.php?post_type=mw-wp-form' ); // MW WP Form.
remove_menu_page( 'all-in-one-seo-pack/aioseop_class.php' ); // All In One SEO Pack.
remove_submenu_page( 'tools.php', 'aiosp_import' ); // All In One SEO Pack.
remove_menu_page( 'wpseo_dashboard' ); // Yoast SEO.
remove_menu_page( 'jetpack' ); // Jetpack.
remove_menu_page( 'edit.php?post_type=acf-field-group' ); // Advanced Custom Fields.
remove_menu_page( 'cptui_main_menu' ); // Custom Post Type UI.
remove_menu_page( 'backwpup' ); // BackWPup.
remove_menu_page( 'ai1wm_export' ); // All-in-One WP Migration.
remove_menu_page( 'advgb_main' ); // Advanced Gutenberg.
remove_submenu_page( 'options-general.php', 'tinymce-advanced' ); // TinyMCE Advanced.
remove_submenu_page( 'options-general.php', 'table-of-contents' ); // Table of Contents Plus.
remove_submenu_page( 'options-general.php', 'duplicatepost' ); // Duplicate Post.
remove_submenu_page( 'upload.php', 'ewww-image-optimizer-bulk' ); // EWWWW.
remove_submenu_page( 'options-general.php', 'ewww-image-optimizer/ewww-image-optimizer.php' ); // EWWWW.
}
add_action( 'admin_menu', 'remove_admin_menus', 999 );
アドミンバーのメニューを消す方法
アドミンバーのメニューを消すには、admin_bar_menu
をフックを利用します。
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 );
プラグインによって作成されるメニューを消したい場合
アドミンバーのメニューのプラグインによって作成されるメニューを消す場合の例を紹介します。
function remove_admin_bar_menus( $wp_admin_bar ) {
$wp_admin_bar->remove_menu( 'new-mw-wp-form' ); // 新規投稿 / MW WP Form.
$wp_admin_bar->remove_menu( 'all-in-one-seo-pack' ); // All in One SEO Pack.
}
add_action( 'admin_bar_menu', 'remove_admin_bar_menus', 100000 );
add_filter( 'aioseo_show_in_admin_bar', '__return_false' ); // All in One SEO Pack.
権限に応じて表示するメニューを切り替える
権限に応じて表示するメニューを切り替えるには、if
文で条件分けします。
ユーザーの権限は、current_user_can()
関数で確認する事ができます。
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' ) ) {
// 購読者の場合
}
おわりに
WordPress管理画面で特定のメニューを非表示にしたり、ユーザーの権限レベルに応じて表示を切り替える方法をご紹介しました。
誰でもメニューを触れてしまうと、誤って設定を変更してしまいエラーが起きる可能性があるので、ユーザーの権限に応じてメニューの表示・非表示の設定をするようにしましょう。