remove_submenu_page( string $menu_slug, string $submenu_slug ): array|false

Removes an admin submenu.


Description

Example usage:

  • remove_submenu_page( 'themes.php', 'nav-menus.php' )
  • remove_submenu_page( 'tools.php', 'plugin_submenu_slug' )
  • remove_submenu_page( 'plugin_menu_slug', 'plugin_submenu_slug' )

Top ↑

Parameters

$menu_slug string Required
The slug for the parent menu.
$submenu_slug string Required
The slug of the submenu.

Top ↑

Return

array|false The removed submenu on success, false if not found.


Top ↑

More Information

Depending on when this function is called, it may not prevent users from accessing the screen for the removed submenu directly (see ticket #18850). Removing a menu does not replace the need to filter a user’s permissions as appropriate.

In order to remove the theme-editor.php submenu of themes.php (and others) in more recent versions of WordPress, you need to bind to the admin_menu hook with a very high priority (about 110, depending on the submenus to remove). Don’t use admin_init as previously stated here, hence it will break wp-admin/admin-ajax.php.


Top ↑

Source

File: wp-admin/includes/plugin.php. View all references

function remove_submenu_page( $menu_slug, $submenu_slug ) {
	global $submenu;

	if ( ! isset( $submenu[ $menu_slug ] ) ) {
		return false;
	}

	foreach ( $submenu[ $menu_slug ] as $i => $item ) {
		if ( $submenu_slug === $item[2] ) {
			unset( $submenu[ $menu_slug ][ $i ] );
			return $item;
		}
	}

	return false;
}

Top ↑

Changelog

Changelog
Version Description
3.1.0 Introduced.

Top ↑

User Contributed Notes

  1. Skip to note 1 content
    Contributed by Aurovrata Venet

    Sometimes it can be tricky to figure what combination of menu/submemiu slug is required to remove a submenu.

    You can figure it out by actually printing the global $submenu array to your debug.log file, and identifying the submenu you want to remove.

     global $submenu;
     error_log(print_r($submenu, true)); //this will print out all the menus/submenus currently available in the admin.
  2. Skip to note 2 content
    Contributed by Codex

    Example
    Removes the Widgets submenu page.

    /**
     * Remove the Widgets submenu page.
     */
    function wpdocs_adjust_the_wp_menu() {
    	$page = remove_submenu_page( 'themes.php', 'widgets.php' );
    	// $page[0] is the menu title
    	// $page[1] is the minimum level or capability required
    	// $page[2] is the URL to the item's file
    }
    add_action( 'admin_menu', 'wpdocs_adjust_the_wp_menu', 999 );

    In the above example, the value of $page would have been:

    array(3) { [0]=> string(7) "Widgets" [1]=> string(18) "edit_theme_options" [2]=> string(11) "widgets.php" }

You must log in before being able to contribute a note or feedback.