web-dev-qa-db-fra.com

wp_nav_menu () conteneur personnalisé et conteneur_id

Alors aujourd'hui, j'ai commencé à travailler sur mon premier thème Wordpress et jusqu'à présent, cela a été très amusant. Cependant, j'ai eu du mal à faire en sorte que wp_nav_menu () fasse ce que je veux.

Voici ce que je veux:

<nav id="topnav" class="menu">
   <ul>
      <li class="current_page_item"><a href="#" title="Home">Home</a></li>
      <li class="page_item page-item-2"><a href="#" title="About">About</a></li>
   </ul>
</nav>

En regardant dans la documentation, je m'attendrais à ce que l'appel suivant fasse ce que je veux:

<?php wp_nav_menu(array( 'container' => 'nav', 'container_id' => 'topnav' )); ?>

Mais au lieu de cela je reçois ceci:

<div class="menu">
   <ul>
      <li class="current_page_item"><a href="#" title="Home">Home</a></li>
      <li class="page_item page-item-2"><a href="#" title="About">About</a></li>
   </ul>
</div>

Pour moi, il semble que mes paramètres personnalisés soient ignorés car la sortie de wp_nav_menu() est exactement la même. Dois-je activer quelque chose pour permettre ceci ou y at-il autre chose?

MODIFIER

Curieusement, si je change de menu_class, cela change la classe de la div (je m'attendais à ce que la div soit le conteneur), mais changer de menu_id ne fait rien.

EDIT 2

Même en allant dans nav-menu-template.php et en changeant les valeurs par défaut pour container, container_id, container_class, menu_id ne fait rien. Changer menu_class en yyy changera la classe du div de menu en yyy.

3
Tom Savage

j'ai eu le problème de sauvegarde: c'est parce que si vous ne créez pas le menu dans l'admin wordpress, utilisez une méthode de repli et créez le menu à partir de toutes les pages actives ... et si cela se produit, les options de wp_nav_menu ne sont pas utilisées .. .

donc: il suffit de créer le menu dans l'admin et vous pouvez changer le wrapper-tag en "nav"

6
user2802

Tout d’abord, vous ne pourrez pas obtenir de WordPress une sortie d’élément <nav> utilisant des fonctions natives. <nav> est une balise HTML5, et WordPress est conçu pour générer une sortie XHTML ... c'est-à-dire aucun élément <nav>.


Edit: Apparemment, la fonction autorise nav ... ... mais gardez à l'esprit que le reste du noyau WordPress est toujours conçu pour générer du XHTML, pas du HTML5 ... veillez à ce que votre site soit correctement validé .


Essayez de supprimer cette référence ... cela peut être à l'origine de l'erreur qui ignore votre instruction 'container_id' => 'topnav'. Si les choses fonctionnent correctement sans la référence à nav, vous devriez avoir ceci:

<div id="topnav" class="menu">
   <ul>
      <li class="current_page_item"><a href="#" title="Home">Home</a></li>
      <li class="page_item page-item-2"><a href="#" title="About">About</a></li>
   </ul>
</div>
1
EAMann
1
hakre

je ne sais pas si quelqu'un cherche toujours à résoudre ce problème - mais je viens d'arriver ici en essayant de trouver la réponse moi-même - je pensais partager ma solution :)

Voulait également utiliser l'élément <nav> au lieu de l'élément <div> et le résoudre en supprimant l'élément <div>, comme indiqué sur cette page, wordpress codex:http://codex.wordpress.org/ Référence_fonction/wp_nav_menu :

<?php
function my_wp_nav_menu_args( $args = '' )
{
    $args['container'] = false;
    return $args;
} // function

add_filter( 'wp_nav_menu_args', 'my_wp_nav_menu_args' );
?>

Ajouté à mon fichier functions.php, marqué le fichier de thème avec la balise <nav> et tout a bien fonctionné pour moi;) espérons que cela aide :)

0
user3160