function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function = '' ) {}

Add a sub menu page
This function takes a capability which will be used to determine whether or not a page is included in the menu.


  • string $parent_slug: The slug name for the parent menu (or the file name of a standard WordPress admin page)
  • string $page_title: The text to be displayed in the title tags of the page when the menu is selected
  • string $menu_title: The text to be used for the menu
  • string $capability: The capability required for this menu to be displayed to the user.
  • string $menu_slug: The slug name to refer to this menu by (should be unique for this menu)
  • callback $function: The function to be called to output the content for this page.

Return values

returns:The resulting page’s hook_suffix, or false if the user does not have the capability required.

Source code

function add_submenu_page( $parent_slug, $page_title, $menu_title, $capability, $menu_slug, $function = '' ) {

	global $submenu;

	global $menu;

	global $_wp_real_parent_file;

	global $_wp_submenu_nopriv;

	global $_registered_pages;

	global $_parent_pages;

	$menu_slug = plugin_basename( $menu_slug );

	$parent_slug = plugin_basename( $parent_slug);

	if ( isset( $_wp_real_parent_file[$parent_slug] ) )

		$parent_slug = $_wp_real_parent_file[$parent_slug];

	if ( !current_user_can( $capability ) ) {

		$_wp_submenu_nopriv[$parent_slug][$menu_slug] = true;

		return false;


	// If the parent doesn't already have a submenu, add a link to the parent

	// as the first item in the submenu.  If the submenu file is the same as the

	// parent file someone is trying to link back to the parent manually.  In

	// this case, don't automatically add a link back to avoid duplication.

	if (!isset( $submenu[$parent_slug] ) && $menu_slug != $parent_slug  ) {

		foreach ( (array)$menu as $parent_menu ) {

			if ( $parent_menu[2] == $parent_slug && current_user_can( $parent_menu[1] ) )

				$submenu[$parent_slug][] = $parent_menu;



	$submenu[$parent_slug][] = array ( $menu_title, $capability, $menu_slug, $page_title );

	$hookname = get_plugin_page_hookname( $menu_slug, $parent_slug);

	if (!empty ( $function ) && !empty ( $hookname ))

		add_action( $hookname, $function );

	$_registered_pages[$hookname] = true;

	// backwards-compatibility for plugins using add_management page.  See wp-admin/admin.php for redirect from edit.php to tools.php

	if ( 'tools.php' == $parent_slug )

		$_registered_pages[get_plugin_page_hookname( $menu_slug, 'edit.php')] = true;

	// No parent as top level

	$_parent_pages[$menu_slug] = $parent_slug;

	return $hookname;



No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: