remove_menu_page( string $menu_slug )
Removes a top-level admin menu.
Description
Example usage:
remove_menu_page( 'tools.php' )
remove_menu_page( 'plugin_menu_slug' )
Parameters
- $menu_slug
-
(string) (Required) The slug of the menu.
Return
(array|false) The removed menu on success, false if not found.
More Information
Parameter $menu_slug
is the slug of the menu, typically the name of the PHP script for the built in menu items; example: edit-comments.php.
This function should be called on the admin_menu action hook. Calling it elsewhere might cause issues: either the function is not defined or the global $menu
variable used but this function is not yet declared.
To remove submenu items in the admin, use remove_submenu_page. Using remove_menu_page() will not work for submenu items.
Source
File: wp-admin/includes/plugin.php
function remove_menu_page( $menu_slug ) { global $menu; foreach ( $menu as $i => $item ) { if ( $menu_slug === $item[2] ) { unset( $menu[ $i ] ); return $item; } } return false; }
Expand full source code Collapse full source code View on Trac View on GitHub
Changelog
Version | Description |
---|---|
3.1.0 | Introduced. |
User Contributed Notes
You must log in before being able to contribute a note or feedback.
You need to use the right hooks (which are not always the same as the URLs/slugs), and it doesn’t hurt to use a hook that runs later (e.g., admin_init):
You can use the following to debug:
This gives you array of the menu positions and inside positions the array of the active menu items and you just need to pickup the right hook (key [2]) and under that is your target hook or URI.
Here is one helper for this:
Expand full source codeCollapse full source code
Just use it like this:
This helper search by name, slug, uri and remove proper menu page.
Example
Removes every menu for all users. To remove only certain menu items include only those you want to hide within the function. To remove menus for only certain users you may want to utilize current_user_can().
Expand full source codeCollapse full source code
(*) Better to add this priority if dealing with jetpack menu: add_action( ‘admin_menu’, ‘remove_menus’, 999 );
Based on the great previous contributions I have developed a script to create the hook functions that will remove all menus. Then I can choose which pages to show, commenting or removing the lines.
You need to place it in functions.php and load wp-admin. Then copy the output to functions.php and remove the script.
Note that
'admin_menu'
may not be sufficient for certain menus. I’ve experienced this with a few plugins. Alternatively you can use'admin_init'
.