web-dev-qa-db-fra.com

Pourquoi la fonction 'wp_nav_menu' ne fonctionne-t-elle que jusqu'à la création d'un menu?

J'essaie de créer un thème pour WordPress, de sorte que j'ai effectué une nouvelle installation. Je n'ai pas créé d'entrées, de pages ou de menus.

À ce stade, je suis en train de créer le menu, j'ai donc créé dans mon fichier functions.php la fonction suivante:

<?php register_nav_menus( array(
  'menu' => 'Menu superior',)); ?>

Et pour l'implémenter dans mon header.php , je l'ai implémenté comme ceci:

<!-- Menu -->
<nav id="menu">  
    <h2>Menu</h2>      
    <?php wp_nav_menu(array(
    'container' => false, 
    'items_wrap' => '<ul> %3$s</ul>', 
    'theme_location' => 'menu', 
    )); ?>
</nav>

J'ai réalisé que lorsque je le lance, il ne me donne pas le style des éléments qu'il m'ajoute. Ces éléments sont les pages qui ont été créées. Dans ce cas, il s'agit de celui qui est généré dans l'installation. ressemble à ceci: Sin menu creado manualmente

Ensuite, je suis allé dans la section menu et en ai créé un manuellement en ajoutant des éléments. J'ai remarqué que le menu apparaît comme je l'avais demandé:

enter image description here

La question qui se pose est que si je propose mon thème aux utilisateurs qui ont une nouvelle installation de wordpress et ne créent toujours pas de menu, mon menu sera alors affiché sans dessin car il ajoute le conteneur div au menu. Et les pages qui ont été créées jusqu'à ce moment seraient ajoutées, mais sans style. Devrais-je spécifier à ceux qui l'acquièrent qu'ils doivent d'abord créer un menu pour le style à appliquer? Ou pouvez-vous créer une forme pour que, dès le début, vous puissiez voir correctement avec le style?

J'apprécie ton aide! (Une excuse, je devais utiliser un traducteur)

SOLUTION

Je l'ai résolu comme suit:

    <!-- Menu -->
    <nav id="menu">  
        <h2>Menu</h2>      
        <?php 
        if ( has_nav_menu( 'menu' ) ) {
            wp_nav_menu(array(
                'container' => false, 
                'items_wrap' => '<ul> %3$s</ul>', 
                'theme_location' => 'menu', 
                ));
        }else{
            echo "<ul>";
            wp_list_pages('title_li=');
            echo "</ul>";
        }
        ?>
    </nav>

Comme mentionné par Milo, je devais vérifier si le menu n’existait toujours pas pour pouvoir effectuer une action spécifique.

1
Gibrán

Cela est dû au paramètre wp_nav_menufallback_cb:

Si le menu n'existe pas, une fonction de rappel sera activée. La valeur par défaut est 'wp_page_menu'. Défini sur false pour éviter tout repli.

Vous n'avez pas spécifié d'alternative, elle utilise donc la valeur par défaut, wp_page_menu .

Vous pouvez créer votre propre fonction pour afficher un menu de page avec le balisage approprié ou définir le paramètre fallback_cb sur false sans rien afficher.

has_nav_menu peut également être utile pour afficher des annotations alternatives lorsqu'un menu n'est pas disponible.

1
Milo