Question

The add_menu_page documentation says to pass the menu title as the second parameter:

add_menu_page('Page Title', 'Menu Title', ...);

When adding more pages later via add_submenu_page, the main page becomes the first entry in the submenu:

enter image description here


However, I want the first item in the list to have a different name (but still point to the same page), the way Wordpress itself does it:

enter image description here


How could I accomplish that in my plugin?

Was it helpful?

Solution

You can make the 'slug' for the submenu page equal that of the top level page, and they'll point to the same place:

add_action('admin_menu', 'my_menu_pages');
function my_menu_pages(){
    add_menu_page('My Page Title', 'My Menu Title', 'manage_options', 'my-menu', 'my_menu_output' );
    add_submenu_page('my-menu', 'Submenu Page Title', 'Whatever You Want', 'manage_options', 'my-menu' );
    add_submenu_page('my-menu', 'Submenu Page Title2', 'Whatever You Want2', 'manage_options', 'my-menu2' );
}

E.g.

enter image description here

OTHER TIPS

make the slug of parent menu item and sub menu same (first one item) like below

function actions_recent_bids_add_admin_page(){

add_menu_page('Recent Bids', 'Auction Reports', 'manage_options','wc-auction-reports','actions_recent_bids_list','dashicons-chart-area', 56);   
  
add_submenu_page(
    'wc-auction-reports',               // parent slug
    'Recent Bids',                      // page title
    'Recent Bids',                      // menu title
    'manage_options',                   // capability
    'wc-auction-reports',               // slug
    'acutions_customers_spendings_list' // callback
); 


add_submenu_page(
    'wc-auction-reports',               // parent slug
    'Customer Spending',                // page title
    'Customer Spending',                // menu title
    'manage_options',                   // capability
    'wc-acutions-customers-spendings',  // slug
    'acutions_customers_spendings_list' // callback
); 
 
add_submenu_page(
    'wc-auction-reports',          // parent slug
    'Customer Bids',               // page title
    'Customer Bids',               // menu title
    'manage_options',              // capability
    'wc-acutions-customers-bids',  // slug
    'acutions_customers_bids_list' // callback
);  

}

add_action('admin_menu','actions_recent_bids_add_admin_page'); 

Simply add this:

$submenu['my-menu'][0][0] = 'My New Menu Title';

For debugging purposes, you can do a print_r($menu) to check the whole WP menu.

add_submenu_page(
        'tut_theme_settings',       // parent slug
        'Front Page Elements 2',    // page title
        'Front Page 2',             // menu title
        'manage_options',           // capability
        'tut_theme_settings2',      // slug
        'theme_front_page_settings' // callback
    ); 

if different name of first sub-menu create same slug of parent and first child and call same function

Licensed under: CC-BY-SA with attribution
Not affiliated with wordpress.stackexchange
scroll top