web-dev-qa-db-fra.com

Menu Admin - Mettez en surbrillance le menu principal lorsque vous êtes sur une page de sous-menu (sans afficher le sous-menu)

Voici la situation actuelle:

  • J'écris un plugin qui a une page de menu de niveau supérieur
  • Le plugin contient également d'autres pages de sous-menu
  • Les pages de sous-menu ne sont pas associées à un slug parent (elles n'apparaissent donc pas dans le menu admin)

Mon exigence est de faire ce qui suit:

  • N'avoir que l'élément de menu de page de menu de niveau supérieur dans le menu d'administration (aucun élément de menu de page de sous-menu ne doit apparaître)
  • Mettez en surbrillance l'élément de menu de la page de menu de niveau supérieur lorsque vous êtes sur une page de sous-menu.

J'ai essayé de donner un slug parent aux pages de sous-menu. Ceci, bien sûr, le fait apparaître comme prévu sous l'élément de menu de niveau supérieur. J'ai ensuite essayé de supprimer l'élément du sous-menu en utilisant remove_submenu_page. Cependant, puisque cela supprime la page entière du sous-menu, cela ne résout pas le problème.

Je pense que la chose logique à faire est de donner un slug parent, car l’élément de menu de niveau supérieur devra savoir que la page consultée est située en dessous. Le problème n’est donc pas d’afficher l’élément de menu de la page de sous-menu. Je suis incapable de trouver une fonction qui traite directement des éléments de menu.


Est-ce la bonne approche ou existe-t-il une meilleure alternative? Existe-t-il une action/un filtre/un crochet que je peux utiliser pour effectuer ce que je dois faire?

Edit # 1:
Fait d'autres recherches/tests. Si vous définissez le paramètre menu_title sur null ou '' dans l'appel add_submenu_page, le titre n'apparaît pas. Cependant, le <li> qui contient l'élément de sous-menu existe toujours et peut être interagi avec. Lorsqu'il y a de nombreuses pages de sous-menu (comme dans mon cas), les éléments <li> vides s'ajouteront et créeront une longue zone vide dans le menu. C'est loin d'être idéal et à ce titre, je suis toujours à la recherche d'une solution.

Edit # 2: J'ai essayé de manipuler le sous-menu $ global après le commentaire de @s_ha_dum. Cependant, toute suppression de la section de menu relative à une page entraîne également le retrait de la page similaire à remove_submenu_page, rendant ainsi cette page inaccessible.

1
Jayawi Perera

C'est une réponse un peu tardive et je ne sais pas si @Jay l'a déjà réglé, mais pour tous ceux qui ont le même problème, voici comment je l'ai résolu.

Pages de menu

function my_admin_menu() {

    add_menu_page(
        'Page title',
        'Menu title',
        'manage_options',
        'my_page',
        null,
        null,
        99
    ); 

    add_submenu_page(
        'my_page',
        'Subpage 1 title',
        'Subpage 1 menu title',
        'manage_options',
        'my_subpage_1',
        null
    );

    add_submenu_page(
        'my_page',
        'Subpage 2 title',
        'Subpage 2 menu title',
        'manage_options',
        'my_subpage_2',
        null
    );
}
add_action( 'admin_menu', 'my_admin_menu' ) );

function my_admin_head() {

    remove_submenu_page( 'my_page', 'my_subpage_1' );
}
add_action( 'admin_head', 'my_admin_head' );

Voir le Codex pour remove_submenu_page .

1
Askelon