web-dev-qa-db-fra.com

Menu de repli "menu_class" rendant un "div" au lieu d'un "ul"

Je travaille sur un menu de secours pour un thème WordPress sur lequel je travaille. Le menu_class du menu principal affiche une ul qui correspond à ce que je veux.

Cependant, si j'utilise le menu de secours, le menu_class restitue plutôt une div. Existe-t-il un moyen de faire en sorte que Wordpress génère une ul pour le menu de secours au lieu d'une div?

Voici mon code:

 function clarity_main_nav_fallback() {

     wp_nav_menu(array(

    'show_home' => true,
    'container' => false,                           // remove nav container
    'container_class' => 'menu clearfix',           // class of container (should you choose to use it)
    'menu_class' => 'nav navbar-nav'              // adding custom nav class

    ));

 }
1
Johann

Premièrement, je pense que vous confondez les arguments wp_nav_menu() . Le paramètre 'menu_class' définit la classe ajoutée à l'élément de menu, qui est par défaut <ul>, conformément au paramètre 'items_wrap'. Le 'menu_class' par défaut est 'menu', ce qui donne <ul class="menu">.

Le vrai problème est en réalité le fallback_cb - le rappel utilisé lorsqu'aucun menu n'est défini - dont la valeur par défaut est wp_page_menu() .

Désormais, wp_nav_menu() et wp_page_menu() affichent une liste non ordonnée (<ul>) encapsulée par un conteneur (<div>) par défaut. Dans votre appel à wp_nav_menu(), vous avez: 'container' => false, qui remplace la liste de menus encapsulée par un conteneur <div>. Mais ce paramètre n'est pas transmis à la sortie de rappel wp_page_menu() par défaut.

La solution la plus simple serait de définir votre propre rappel :

wp_nav_menu( array(
    // Add your normal args here
    'fallback_cb' => 'wpse116656_nav_menu_cb'
) );

Puis déclarez votre fonction de rappel:

function wpse116656_nav_menu_cb() {
    wp_page_menu( array(
        // Args here
    ) );
}

Maintenant, voici la mise en garde:

  • wp_nav_menu() applique le paramètre 'menu_class' à la liste non ordonnée

    (<div><ul class="$menu_class"></ul></div>)

  • wp_page_menu() applique le paramètre 'menu_class' au conteneur wrapper en dehors de la liste du menu.

    (<div class="$menu_class"><ul></ul></div>)

Donc, vous devrez en rendre compte avec votre CSS.

4
Chip Bennett