web-dev-qa-db-fra.com

Classe actuelle dans le menu admin en utilisant add_submenu_page ()

Je travaille sur la création d'un menu d'administration dans WordPress pour un plugin. J'ai enregistré avec succès le menu en utilisant add_menu_page () et il apparaît dans la barre latérale comme prévu. J'ai également ajouté quelques sections dans le menu en utilisant add_submenu_page ().

Il semble que WordPress (en cours d'exécution 3.05) n'indique pas correctement quel élément de menu doit être activé en tant que "actuel".

Lorsque j'ajoute une page de test au menu principal du tableau de bord, voici ce que je vois:

http://dl.dropbox.com/u/3019972/wp-screen1.png

Comme vous pouvez le constater, la page en cours est visuellement correcte dans le menu et reçoit une classe "en cours". Cependant, sur mon propre menu, cela ressemble à ceci:

http://dl.dropbox.com/u/3019972/wp-screen2.png

Dans cet exemple, je m'attendrais à ce que "Tableau de bord" soit mis en évidence.

Est-ce simplement un bug de WordPress? ou dois-je fournir un code spécial pour que cela fonctionne dans mon propre menu?

Mis à jour avec des exemples de code

Le code que j'utilise pour ajouter et créer des menus ressemble à ceci:

add_action('admin_menu','my_admin_menu');

function my_admin_menu() {

// this test works as expected
// add_submenu_page( 'index.php', 'test', 'test', 'read', 'admin.php?page=plugin-dashboard','my_pluggin_dashboard' );

// my main menu menu    
add_menu_page(__('My Plugin', 'myplugin'),__('My Plugin', 'myplugin'), 'edit_posts','admin.php?page=plugin-dashboard','my_plugin_dashboard','icon');

// dashboard submenu - this fails to highlight with current
add_submenu_page('admin.php?page=plugin-dashboard', __('Dashboard','myplugin'), __('Dashboard','myplugin'), 'edit_posts', 'admin.php?page=plugin-dashboard', 'my_plugin_dashboard' );

// settings submenu - this fails to highlight with current
add_submenu_page('admin.php?page=plugin-dashboard', __('Settings','myplugin'), __('Settings','myplugin'), 'manage_options', 'admin.php?page=my-plugin-settings', 'my_plugin_settings' );

}

J'ai commenté le code qui fonctionne et le code qui ne se comporte pas comme prévu. Merci pour vos commentaires.

1
Scott

Essaye ça:

add_menu_page(__('My Plugin', 'myplugin'),__('My Plugin', 'myplugin'), 'edit_posts','my-plugin-dashboard','my_plugin_dashboard','icon');

// dashboard submenu - this fails to highlight with current
add_submenu_page('my-plugin-dashboard', __('Dashboard','myplugin'), __('Dashboard','myplugin'), 'edit_posts', 'my-plugin-dashboard', 'my_plugin_dashboard' );

// settings submenu - this fails to highlight with current
add_submenu_page('my-plugin-dashboard', __('Settings','myplugin'), __('Settings','myplugin'), 'manage_options', 'my-plugin-settings', 'my_plugin_settings' );

Essentiellement: n'utilisez pas de liens de page complète avec admin.php? ... comme slug de page. Surtout si vous passez des rappels, utilisez simplement un slug, pas une adresse de page.

2
wyrfel