Using the remove_menu_page() function works for removing the default admin menu items by their slug like so:

add_action( 'admin_menu', 'hide_menu' );

function hide_menu() {
    remove_menu_page( 'index.php' ); // Dashboard
    remove_menu_page( 'tools.php' ); // Tools

When a plugin created their own menu in the Dashboard, the URL structure looks like the following:

However when trying to remove the custom plugin menu item like so:

remove_menu_page( 'admin.php?page=plugin-slug' );

Nothing changes. Looking at a similar questions here and here, it seems that my function isn't called in time once the custom plugin settings load? Yet, when I try to increase the priority to a higher number, that still doesn't work:

add_action( 'admin_menu', 'hide_menu', 9001, 1 );

Is there a work around? Am I doing this correctly?

Place this below temporary code in your functions.php or any where that can be executed.

add_action( 'admin_init', 'the_dramatist_debug_admin_menu' );

function the_dramatist_debug_admin_menu() {

    echo '<pre>' . print_r( $GLOBALS[ 'menu' ], TRUE) . '</pre>';

Then search for the plugin-slug. In which array you find it copy the [2] value and put it in remove_menu_page('the [2] value') and hook it to admin_init like below-

add_action('admin_init', '');
function the_dramatist_remove_menu(){
    remove_menu_page( 'the [2] value' );

And it will be working. And after it is working remove the temporary code block.

On the other hand, you can inspect the plugin code which menu page you wanna remove and in their add_menu_page() function take the fourth parameter of the add_menu_page() function and put it inside remove_menu_page('fourth parameter'). It will work as well. The code will look like below-

add_action('admin_init', '');
function the_dramatist_remove_menu(){
    remove_menu_page( 'fourth parameter of add_menu_page()' );
  • 1
    Thanks for the answer, looking at your answer, I've actually figured out that if I hook to the admin_init tag, I'm able to hide the custom setting menus. See my answer. – Ethan Jinks O'Sullivan Oct 18 '16 at 15:01
  • +1 for the print_r Globals snippit – DGRFDSGN Nov 19 at 11:20
up vote 4 down vote accepted

Thanks to the answer that the_dramatist posted, it was a matter of just hooking to the admin_init tag. The slugs for those plugin pages can be retrieved by the debug script that the_dramatist provided, or you can simply look at that query value after admin.php?page=plugin-slug:

add_action( 'admin_init', 'wpse_243070_hide_menu' );

function wpse_243070_hide_menu() {
    remove_menu_page( 'index.php' ); // Dashboard
    remove_menu_page( 'tools.php' ); // Tools
    remove_menu_page( 'plugin-slug' ); // Some plugin
    remove_menu_page( 'another_slug' ); // Another plugin
  • That is right, simple use remove_menu_page( 'menu_slug'). it does work well. – li bing zhao May 9 at 19:16

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.