Advanced Custom Fields

先日 WordPress の管理画面のメニューを非表示にする方法を紹介しました。

【WordPress】特定のユーザー以外は管理画面のメニューを非表示にする。:https://on-ze.com/blog/3171

これはこれでウマく機能するのですが、プラグイン系のメニュー項目を非表示にしたい場合に、ちょっとした工夫が必要になるケースがありました。

例えば仮に「Contact Form 7」のメニューを非表示にしたい場合は、以下のコードが使えます。

function remove_menu() {
	 remove_menu_page('wpcf7');
}
add_action('admin_init', 'remove_menu');

同じやり方でプラグイン[Advanced Custom Fields]のメニューを非表示にしようとしたのですが……

function remove_menu() {
	 remove_menu_page('acf');
}
add_action('admin_init', 'remove_menu');

上記のコードだとウマくいかず、困りました。

結論を言えば、「add_action」の引数でプライオリティを10以上にすることと、「remove_menu_page」で「acf」ではなく「edit.php?post_type=acf」を指定することで解決しました。

function remove_menu() {
	  remove_menu_page('edit.php?post_type=acf');
add_action('admin_init', 'remove_menu', 11);

前回と同じように「特定のユーザー以外は非表示」にさせたい場合は、さらにコードを追加して下記のようにします。

function remove_menu () {
$user = wp_get_current_user();
	   if( $user-> get('user_login') !== "USER_ID") {
	  	  remove_menu_page('edit.php?post_type=acf');
	  }
}
add_action('admin_menu', 'remove_menu', 11);

コード内の「USER_ID」の箇所は任意のユーザーIDに書き換えること。
これで万事解決です!