I'm working on a plugin that constructs a top level menu and resides within its own directory in /wp-content/plugins.

For example, the plugin looks like this:

function main_menu() {
  if(function_exists('add_menu_page')) {
   add_menu_page('Main Menu Title', 'Main Menu', 'administrator', 'main-menu-handle', 'menu-display');
add_action('admin_menu', 'main_menu');

I would like to build out additional menu items as plugins in the future so that they may reside in their own directory within /wp-content/plugins but will add themselves to this particular custom menu.

Ideally, these new plugins would register themselves like this:

function register_submenu() {
  if(function_exists('add_submenu_page')) {
    add_submenu_page('main-menu-handle', 'Widget Title', 'Widget', 'administrator', 'widget-handle', 'widget_display');
add_action('admin_menu', 'register_submenu');

But I can't seem to make this work mainly because of the way WordPress uses the admin.php and the page query string parameter to navigate custom menus.

Any insight?

1 Answer 1


It sounds as if you're having problems adding submenus from a plugin to a parent item registered in another plugin.

Add priorities to your admin_menu actions to make sure the parent(top level) item exists at the point your additional plugins attempt to add items to that menu..

Add top level

add_action('admin_menu', 'main_menu', 100 );

Add sub items

add_action('admin_menu', 'register_submenu', 105 );

Default priority is 10, so your two callbacks were possibly executing in the wrong order.

Let me know if that helps.

  • That took care of it. Good stuff, I appreciate it!
    – Tom
    Commented Jan 4, 2011 at 16:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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