【WordPress】管理画面メニューのカスタマイズ


管理画面の左側にあるメニューをカスタマイズする方法メモ。

## 非表示にする

### unset
admin_menuフックを使い、対象のメニューをunsetしてあげることで、非表示にすることが出来ます。

```php:functions.php
function remove_menus () {
	global $menu;
	unset($menu[2]);  // ダッシュボード
	unset($menu[4]);  // メニューの線1
	unset($menu[5]);  // 投稿
	unset($menu[10]); // メディア
	unset($menu[15]); // リンク
	unset($menu[20]); // ページ
	unset($menu[25]); // コメント
	unset($menu[59]); // メニューの線2
	unset($menu[60]); // テーマ
	unset($menu[65]); // プラグイン
	unset($menu[70]); // プロフィール
	unset($menu[75]); // ツール
	unset($menu[80]); // 設定
	unset($menu[90]); // メニューの線3
}
add_action('admin_menu', 'remove_menus');
```

サブメニューを削除したい場合は、$submenuを使います。
$submenuをvar_dump()すると配列の値を調べることが出来ます。

```php:functions.php
function remove_menus () {
	global $submenu;
	// var_dump($submenu);
	unset($submenu['edit.php'][5]); // 投稿一覧
}
add_action('admin_menu', 'remove_menus');
```

### remove_menu_page
unsetではなく、remove_menu_pageでも非表示にすることが可能です。
<a href="https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/remove_menu_page" target="_blank">関数リファレンス/remove menu page</a>

```php:functions.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');
```

サブメニューを削除したい場合は、remove_submenu_pageを使います。
例えば、投稿の新規追加を非表示にしたい場合は以下のようにします。
unsetの時と同様に、非表示にしたいメニューの値を調べるには$submenuをvar_dump()します。

```php:functions.php
function remove_menus () {
	global $submenu;
	// var_dump($submenu);
	remove_submenu_page('edit.php', 'post-new.php');
}
add_action('admin_menu', 'remove_menus');
```


### プラグインのメニューを非表示
プラグインのメニューも非表示にすることが出来ます。
例としてCustom Post Type UIのメニューを非表示にしてみます。
まず、プラグインのスラッグ名を調べる必要があるので、var_dumpで調べます。


```php:functions.php
function remove_menus () {
	global $menu;
	var_dump($menu);
}
add_action('admin_menu', 'remove_menus');
```

管理画面にダッーと値が表示されるので、Custom Post Type UIの値を探します。
(左ナビが邪魔で見えないので、デベロッパーツールで消しちゃいましょう。
※ $menuにないプラグインのメニューはこの方法では非表示にすることが出来ないと思います。

![ss01.png](https://qiita-image-store.s3.amazonaws.com/0/48677/0ee7f215-0481-18f3-1c5f-53f6ddb1eab5.png "ss01.png")


値が分かったので、非表示にしてみます。
unsetを使う場合は配列番号、remove_menu_pageを使う場合は、「2 =>」の箇所の値を指定します。

```php:functions.php
function remove_menus () {
	// unsetを使う場合
	global $menu;
	unset($menu[2]);
	
	// remove_menu_pageを使う場合
	remove_menu_page('cptui_main_menu');
}
add_action('admin_menu', 'remove_menus');

```


### 管理者レベルで振り分け

管理者レベルによって制御したい場合はcurrent_user_canを使います。
<a href="http://wpdocs.osdn.jp/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%A8%E6%A8%A9%E9%99%90#.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E3.83.AC.E3.83.99.E3.83.AB" target="_blank">WordPress Codex ユーザーの種類と権限</a>

```php:functions.php
function remove_menus () {
	if (!current_user_can('level_10')) { //level10以下のユーザーの場合
		~　処理　~
	}
}
add_action('admin_menu', 'remove_menus');
```

※追記
__ユーザーレベルでの振り分けはバージョン3.0で非推奨__となっているので、ユーザーグループではなく権限グループで振り分けます。
<a href="https://wpdocs.osdn.jp/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%A8%E6%A8%A9%E9%99%90#.E6.A8.A9.E9.99.90.E3.82.B0.E3.83.AB.E3.83.BC.E3.83.97" target="_blank">WordPress Codex 権限グループ</a>

```php:functions.php
function remove_menus () {
	if (!current_user_can('administrator')) { //管理者ではない場合
		~　処理　~
	}
}
add_action('admin_menu', 'remove_menus');
```

利用できる権限は以下になります。

| 値 | 権限 | ユーザーレベル |
|:-----------|:------------|:------------|
| administrator | 管理者 | 8 ~ 10 |
| editor | 編集者 | 3 ~ 7 |
| author | 投稿者 | 2 |
| contributor | 寄稿者 | 1 |
| subscriber | 購読者 | 0 |



## 項目名を変更する
項目名を変更するには、admin_menuをフックし値を上書きするだけで変更できます。
配列の値を知りたい場合は、var_dump()すると分かります。

```php:functions.php
function change_post_label() {
	global $menu;
	global $submenu;

	// var_dump($menu);
	// var_dump($submenu);

	$menu[5][0] = 'お知らせ'; // 投稿をお知らせに変更
	$submenu['edit.php'][5][0] = 'お知らせ一覧'; // 投稿一覧をお知らせ一覧に変更
}
add_action( 'admin_menu', 'change_post_label' );
```


## WP Admin UI Customize
手動でいろいろ設定する方法をまとめてみましたが、これらは全部プラグインで簡単に設定できます。
WP Admin UI Customizeはシンプルな操作で簡単な操作で設定するとが出来ます。
サイドメニュー以外にもいろいろ設定することができて、いい感じなプラグインです。

<a href="http://wpadminuicustomize.com/ja/" target="/_blank">WP Admin UI Customize 公式</a>