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


11

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

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

Mi archivo functions.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?

Respuestas:


19

Use has_nav_menu()y pruebe 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 elsecláusula.

EDITAR

Necesita reemplazar $theme_locationcon su 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' => '' 
    ) );
}
?>

Si bien esto da salida a nada si no hay menú, que por desgracia hace lo mismo cuando no es un menú. ¿Alguna otra idea?
— Ryan

¿Ha aplicado un menú a la ubicación del tema especificado?
— Chip Bennett

No, ¿cómo hago eso?
— Ryan

1
Dashboard -> Appearance -> Menus. Cree y guarde un menú personalizado, luego aplíquelo a la Ubicación del tema especificada, utilizando el menú desplegable.
— Chip Bennett

Ah sí, lo había hecho (captura de pantalla: bit.ly/vrjNf9 ). Desafortunadamente, el problema aún persiste: el menú no aparecerá. PD Mi archivo de funciones tiene esto: if (function_exists ('register_nav_menus')) {register_nav_menus (array ('main_nav' => 'Main Navigation Menu'));}
— Ryan


0

Simplemente puede registrar el menú en primer lugar 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 llame al menú header.php, consulte con has_nav_menu():

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

Si registra un menú sin una ubicación de tema, no puede solicitarlo más tarde con una restricción de ubicación de tema.
— fuxia

0

Lee esto:

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

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


Esto es lo mismo que la respuesta de Chrisguitarguy ...
— brasofilo

Lo sé, solo quería señalar el artículo principal sobre el codex de WordPress.
— Hooman Askari

Parece que no es cierto. Los documentos dicen: si no se le da un parámetro de ubicación_tema, la función muestra developer.wordpress.org/reference/functions/wp_nav_menu/… el menú que coincide con la ID, la babosa o el nombre dado por el parámetro de menú; de lo contrario, el primer menú no vacío; de lo contrario (o si el menú dado por el menú está vacío), salida de la función dada por el parámetro fallback_cb (wp_page_menu (), por defecto); de lo contrario nada.
— Alireza
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.