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.