先日 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に書き換えること。
これで万事解決です!