web-dev-qa-db-fra.com

Comportement étrange avec la création de lien de sous-menu

J'essaie de développer un plugin qui doit ajouter deux pages au menu latéral du tableau de bord. L'un d'entre eux étant une catégorie principale. Tout va bien, à l'exception du deuxième élément de sous-menu pour la page des paramètres. Après avoir parcouru à peu près le même nombre de codex et effectué des recherches sur le Web à la recherche de problèmes similaires, je n'ai trouvé aucune solution.

Est-ce que je manque quelque chose avec ça? (le premier sous-menu est de créer la page de destination dupliquée, bien sûr)

Code

add_action('admin_menu', 'my_add_submenu');
function my_add_submenu(){
    add_menu_page( 'Author Discussion', 'Discussion', 'manage_options', 'author_discuss', 'author_discuss_build_page', plugins_url( 'author-discussion/images/icon.png' ), 999 );
    add_submenu_page( 'author_discuss', 'Author Discussion', 'Author Discussion', $menu_capability, 'author_discuss' );
    add_submenu_page( 'author_discuss', 'Author Discussion Settings', 'Settings', 'manage_options', 'author_discuss_settings', 'author_discuss_settings_page' );
}

function author_discuss_build_page(){
    //do something
}

function author_discuss_settings_page() { 
    //do something
}

Effet

Une chose que je remarque, quand je vais cliquer sur le lien dans la barre latérale, il redirige vers:

  • /wp-admin/author_discuss_settings
  • au lieu de /wp-admin/admin.php? page = author_discuss_settings

J'ai l'impression qu'il me manque quelque chose d'évident.

Qu'ai-je essayé?

J'ai suivi le dernier exemple sur le codex WordPress situé ici .

J'ai essayé de changer l'action de admin_menu à admin_init pour voir si cela changerait le résultat. L'URL s'imprime comme prévu puis /wp-admin/admin.php? Page = author_discuss_settings , mais génère une erreur "Vous ne disposez pas d'une erreur d'autorisations suffisantes."

1
Brandon White

Sur la même page du codex, vous avez ceci:

REMARQUE: Si vous rencontrez le message "Vous ne disposez pas des autorisations suffisantes pour accéder à cette page". message dans un écran wp_die (), alors vous vous êtes accroché trop tôt.

Cela répond donc à votre question en partie.

La deuxième partie, le code suivant devrait fonctionner:

add_action('admin_menu', 'my_add_submenu');
function my_add_submenu(){
      add_menu_page( 'Parent', 'Parent', 'manage_options', 'author_discuss', 'author_parent' ); 
      add_submenu_page( 'author_discuss', 'Author Discussion', 'Author Discussion', 'manage_options', 'author_discuss' );
      add_submenu_page( 'author_discuss', 'Author Discussion Settings', 'Settings', 'manage_options', 'author_discuss_settings', 'author_discuss_settings_page' );
}

function author_parent() {

}

function author_discuss_settings_page() { 
    //do something
}

Vérifiez vos fonctions et voyez s'il y a une faute de frappe.

2
JMau