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.