管理画面のメニューを非表示

WordPressの管理画面のメニューを非表示にする方法です。
更新の可能性のあるテーマ(自作ではないテーマ)の場合は子テーマを作成して、子テーマから下記に進んでください。

  1. メニューを非表示にする方法1
  2. メニューを非表示にする方法2
  3. 権限ごとに非表示にする方法
  4. カスタム投稿を非表示にする方法

メニューを非表示にする方法1

管理画面のメニューを非表示にする場合はremove_menusを使用します。
例えば「外観」を非表示にしたい場合はfunction.phpに下記を記述します。

function remove_menus () {
  global $menu;
  remove_menu_page( 'themes.php' );
}
add_action('admin_menu', 'remove_menus');

その他の記述は以下の通りです。

function remove_menus() {
remove_menu_page( 'index.php' ); // ダッシュボード
remove_menu_page( 'edit.php' ); // 投稿
remove_menu_page( 'edit.php?post_type=カスタム投稿名' ); //カスタム投稿の名称を設定
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' );

メニューを非表示にする方法2

unset()とglobal $menuを使用して非表示にすることも可能です。
function.phpに下記を記述します。

function remove_menus() {
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', 'remove_menus' );

権限ごとに非表示にする方法

権限ごとに管理画面のメニューを非表示にする場合はcurrent_user_canを使用します。

if (!current_user_can('administrator')) { // 管理者権限以外を対象
  function remove_menus () {
    global $menu;
    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' );
}

管理者権限以外は以下の通りです。

編集者:editor
投稿者:author
寄稿者:contributor
購読者:subscriber

ユーザーごとに非表示にする方法

ユーザーごとに管理画面のメニューを非表示にする場合はグローバル変数で現在のユーザーを取得します。
例えば、管理者(ユーザーID1)以外のユーザーの時に非表示にしたい場合はfunction.phpに下記を記述します。

global $current_user;
get_currentuserinfo();
if ($current_user->ID != '1' ) { // 管理者権限以外を対象
  function remove_menus () {
    global $menu;
    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');
}

特定のユーザーを対象にしたい場合は比較演算子を 「!=」 から 「==」に変更します。
例えばユーザーID2に「外観」を非表示にしたい場合はfunction.phpに下記を記述します。

global $current_user;
get_currentuserinfo();
if ($current_user->ID == '2' ) {
  function remove_menus () {
    global $menu;
    remove_menu_page( 'themes.php' ); // 外観
  }
  add_action('admin_menu', 'remove_menus');
}

複数のユーザーを対象にするには論理演算子の || を追加します。

global $current_user;
get_currentuserinfo();
if ($current_user->ID == '2'|| $current_user->ID == '3' ) {
  function remove_menus () {
    global $menu;
    remove_menu_page( 'themes.php' ); // 外観
  }
  add_action('admin_menu', 'remove_menus');
}

ユーザーの判別に使用するユーザーIDはユーザーのプロフィールページに表示されるアドレス内に、ユーザーIDとして表示されています。