wp_nav_menu: mostra il menu solo se ne esiste uno, altrimenti non mostra nulla


11

Sto cercando di usare wp_nav_menu per visualizzare un menu solo se ne esiste uno, altrimenti non visualizzare nulla.

Se elimino il menu, verrà visualizzato un elenco di pagine.

Il mio file Functions.php contiene:

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

Come posso usare wp_nav_menu per visualizzare un menu solo se esiste, altrimenti non mostrare nulla?

Risposte:


19

Utilizzare has_nav_menu()e testare theme_location, anziché 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' => '' 
    ) );
}
?>

È possibile produrre contenuti alternativi aggiungendo una elseclausola.

MODIFICARE

Devi sostituire il $theme_locationtuo attuale 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' => '' 
    ) );
}
?>

Mentre questo emette nulla se non c'è nessun menu, lo fa purtroppo la stessa cosa quando si è un menu. Altre idee?
Ryan,

Hai applicato un menu alla posizione del tema specificata?
Chip Bennett,

No, come posso farlo?
Ryan,

1
Dashboard -> Appearance -> Menus. Crea e salva un menu personalizzato, quindi applicalo nella posizione tematica specificata, utilizzando il menu a discesa.
Chip Bennett,

Ah sì, l'avevo fatto (screenshot: bit.ly/vrjNf9 ). Sfortunatamente, il problema persiste ancora: il menu non verrà visualizzato. PS Il mio file di funzioni ha questo: if (function_exists ('register_nav_menus')) {register_nav_menus (array ('main_nav' => 'Main Navigation Menu'));}
Ryan,


0

Puoi semplicemente registrare il menu in primo luogo senza specificare la posizione.
In functions.php:

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

E quando si chiama il menu header.php, verificare con has_nav_menu():

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

Se registri un menu senza una posizione del tema, non puoi richiederlo in seguito con una limitazione della posizione del tema.
fuxia

0

Leggi questo:

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

set 'fallback_cb' => false e nessuno verrà visualizzato, questo è il metodo standard suggerito dai ragazzi di wp.


È la stessa risposta di chrisguitarguy ...
brasofilo,

Lo so, volevo solo farti notare l'articolo principale sul codice wordpress.
Hooman Askari,

Sembra che non sia vero. Il documento dice: Se non viene assegnato un parametro theme_location, la funzione visualizza developer.wordpress.org/reference/functions/wp_nav_menu/… il menu che corrisponde all'ID, alla lumaca o al nome fornito dal parametro menu; in caso contrario, il primo menu non vuoto; altrimenti (o se il menu dato dal menu è vuoto), output della funzione data dal parametro fallback_cb (wp_page_menu (), di default); altrimenti niente.
Alireza,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.