wp_nav_menu: muestra el menú solo si existe, de lo contrario no muestra nada

8

Estoy intentando usar wp_nav_menu para mostrar solo un menú si existe, de lo contrario, no mostrar nada.

Si elimino el menú, se mostrará una lista de las páginas.

El archivo de mis funciones.php contiene:

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

¿Cómo puedo usar wp_nav_menu para mostrar solo un menú si existe, de lo contrario no mostrar nada?

    
pregunta Ryan 02.11.2011 - 20:48

4 respuestas

15

Use has_nav_menu() , y pruebe para theme_location , en lugar 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' => '' 
    ) );
}
?>

Puede generar contenido alternativo agregando una cláusula else .

EDIT

Necesitas reemplazar $theme_location con tu actual 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' => '' 
    ) );
}
?>
    
respondido por el Chip Bennett 02.11.2011 - 20:59
6

Puede simplemente especificar falso como el argumento fallback_cb de wp_nav_menu . No se mostrará nada, más bien, wp_nav_menu devolverá false (no hace eco de nada).

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

Primero puede registrar el menú sin especificar la ubicación.
En functions.php :

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

Y cuando llamas al menú en header.php , consulta con has_nav_menu() :

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

Lee esto:

enlace

establece 'fallback_cb' = > falso y no se mostrará ninguno, este es el método estándar sugerido por wp guys.

    
respondido por el Hooman Askari 06.10.2013 - 13:20

Lea otras preguntas en las etiquetas