wp_nav_menu: afficher le menu uniquement s'il en existe un, sinon ne rien afficher


11

J'essaie d'utiliser wp_nav_menu pour afficher uniquement un menu s'il en existe un, sinon, n'afficher rien.

Si je supprime le menu, il affichera une liste des pages.

Mon fichier functions.php contient:

if (function_exists('register_nav_menus')) {
register_nav_menus (
array('main_nav' => 'Main Navigation Menu'));}

Comment puis-je utiliser wp_nav_menu pour afficher uniquement un menu s'il en existe un, sinon ne rien montrer?

Réponses:


19

Utilisez has_nav_menu()et testez theme_locationplutôt que menu_id:

<?php
if ( has_nav_menu( $theme_location ) ) {
    // User has assigned menu to this location;
    // output it
    wp_nav_menu( array( 
        'theme_location' => $theme_location, 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

Vous pouvez générer un contenu alternatif en ajoutant une elseclause.

ÉDITER

Vous devez remplacer $theme_locationpar votre réel theme_location :

<?php
if ( has_nav_menu( 'main_nav' ) ) {
    // User has assigned menu to this location;
    // output it
    wp_nav_menu( array( 
        'theme_location' => 'main_nav', 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

Bien que cela génère rien s'il n'y a pas de menu, il ne malheureusement la même chose quand il est un menu. D'autres idées?
— Ryan

Avez-vous appliqué un menu à l'emplacement de thème spécifié?
— Chip Bennett

Non, comment je fais ça?
— Ryan

1
Dashboard -> Appearance -> Menus. Créez et enregistrez un menu personnalisé, puis appliquez-le à l'emplacement de thème spécifié, à l'aide du menu déroulant.
— Chip Bennett

Ah oui, je l'avais fait (capture d'écran: bit.ly/vrjNf9 ). Malheureusement, le problème persiste - le menu n'apparaîtra pas. PS Mon fichier de fonctions a ceci: if (function_exists ('register_nav_menus')) {register_nav_menus (array ('main_nav' => 'Main Navigation Menu')));}
— Ryan


0

Vous pouvez simplement enregistrer le menu tout d'abord sans spécifier l'emplacement.
Dans functions.php:

add_action( 'init', 'register_my_menus' );
function register_my_menus() {  
    register_nav_menus(
        array(
            'header' => __( 'Header Menu' )
        )
    );
}

Et lorsque vous appelez le menu header.php, vérifiez avec has_nav_menu():

if ( has_nav_menu( 'header' ) ) {
    wp_nav_menu( array( 'theme_location' => 'header' ) ); 
}

Si vous enregistrez un menu sans emplacement de thème, vous ne pouvez pas le demander plus tard avec une restriction d'emplacement de thème.
— fuxia

0

Lis ça:

http://codex.wordpress.org/Function_Reference/wp_nav_menu

set 'fallback_cb' => false et aucun ne sera affiché, c'est la méthode standard suggérée par les gars de wp.


C'est la même chose que la réponse de chrisguitarguy ...
— brasofilo

Je sais, je voulais juste vous signaler l'article principal sur le codex wordpress.
— Hooman Askari

Il semble que ce ne soit pas vrai. La documentation dit: Si aucun paramètre theme_location ne lui est attribué, la fonction affiche developer.wordpress.org/reference/functions/wp_nav_menu/… le menu correspondant à l'ID, au slug ou au nom donné par le paramètre de menu; sinon, le premier menu non vide; sinon (ou si le menu donné par menu est vide), sortie de la fonction donnée par le paramètre fallback_cb (wp_page_menu (), par défaut); sinon rien.
— Alireza
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.