wp_nav_menu: mostra o menu apenas se existir algum, caso contrário, não mostrará nada

8

Estou tentando usar o wp_nav_menu para exibir apenas um menu, se existir, caso contrário, não exiba nada.

Se eu excluir o menu, ele exibirá uma lista das páginas.

Meu arquivo functions.php contém:

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

Como posso usar wp_nav_menu para exibir apenas um menu, se existir algum, caso contrário, não mostrar nada?

    
por Ryan 02.11.2011 / 20:48

4 respostas

15

Use has_nav_menu() e teste para theme_location , em vez de 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' => '' 
    ) );
}
?>

Você pode gerar conteúdo alternativo adicionando uma cláusula else .

EDITAR

Você precisa substituir $theme_location com seu real 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' => '' 
    ) );
}
?>
    
por Chip Bennett 02.11.2011 / 20:59
6

Você pode especificar false como o argumento fallback_cb de wp_nav_menu . Nada será mostrado - em vez disso, wp_nav_menu retornará false (não ecoando nada).

<?php
wp_nav_menu(array( 
    'theme_location' => $main_nav, 
    'menu_class'     => 'nav', 
    'container'      => '',
    'fallback_cb'    => false
));
    
por chrisguitarguy 02.11.2011 / 23:06
0

Você pode apenas registrar o menu em primeiro lugar sem especificar o local.
Em functions.php :

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

E quando você chamar o menu em header.php , verifique com has_nav_menu() :

if ( has_nav_menu( 'header' ) ) {
    wp_nav_menu( array( 'theme_location' => 'header' ) ); 
}
    
por Alex Chen 27.11.2012 / 00:30
0

Leia isto:

enlace

definir 'fallback_cb' = > false e nenhum será exibido, este é o método padrão sugerido pelo wp guys.

    
por Hooman Askari 06.10.2013 / 13:20