web-dev-qa-db-fra.com

wp_nav_menu: affiche le menu seulement s'il en existe un, sinon rien ne s'affiche

J'essaie d'utiliser wp_nav_menu pour n'afficher qu'un menu s'il en existe un, sinon rien n'a été affiché.

Si je supprime le menu, une liste des pages sera affichée.

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 un menu s'il en existe un, sinon rien?

9
Ryan

Utilisez has_nav_menu() et testez theme_location plutô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 du contenu alternatif en ajoutant une clause else.

EDIT

Vous devez remplacer $theme_location par votre réeltheme_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' => '' 
    ) );
}
?>
16
Chip Bennett

Vous pouvez simplement spécifier false comme argument fallback_cb de wp_nav_menu. Rien ne s'affichera - wp_nav_menu retournera plutôt faux (sans rien de nouveau).

<?php
wp_nav_menu(array( 
    'theme_location' => $main_nav, 
    'menu_class'     => 'nav', 
    'container'      => '',
    'fallback_cb'    => false
));
6
chrisguitarguy

Vous pouvez simplement enregistrer le menu 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 dans header.php, vérifiez avec has_nav_menu() :

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

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 wp les gars.

0
Hooman Askari