web-dev-qa-db-fra.com

Comment ajouter un menu personnalisé de sous-niveau spécifié dans un répertoire à un menu de niveau supérieur personnalisé spécifié dans un autre répertoire?

Je travaille sur un plugin qui construit un menu de niveau supérieur et réside dans son propre répertoire dans/wp-content/plugins.

Par exemple, le plugin ressemble à ceci:

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');

J'aimerais créer d'autres éléments de menu en tant que plugins à l'avenir, afin qu'ils puissent résider dans leur propre répertoire dans/wp-content/plugins, mais qu'ils s'ajouteront à ce menu personnalisé.

Idéalement, ces nouveaux plugins s’enregistreraient comme ceci:

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');

Mais je n'arrive pas à faire en sorte que cela fonctionne principalement à cause de la manière dont WordPress utilise les paramètres admin.php et chaîne de requête de page pour naviguer dans les menus personnalisés.

Une idée?

1
Tom

On dirait que vous avez des problèmes pour ajouter des sous-menus d'un plugin à un élément parent enregistré dans un autre plugin.

Ajoutez des priorités à vos actions admin_menu pour vous assurer que l'élément parent (niveau supérieur) existe au moment où vos plug-ins supplémentaires tentent d'ajouter des éléments à ce menu.

Ajouter le niveau supérieur

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

Ajouter des sous-éléments

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

La priorité par défaut est 10, vos deux rappels ont peut-être été exécutés dans le mauvais ordre.

Faites-moi savoir si cela vous a été utile.

5
t31os