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

2 nov 2011, 21:48:43
Visualizzazioni: 20.9K
Voti: 14

Sto cercando di utilizzare wp_nav_menu per mostrare un menu solo se esiste, altrimenti non visualizzare nulla.

Se elimino il menu, viene generato automaticamente un elenco delle pagine.

Il mio file functions.php contiene:

if (function_exists('register_nav_menus')) {
register_nav_menus (
array('main_nav' => 'Menu di Navigazione Principale'));}

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

0
Tutte le risposte alla domanda 4
9
24

Utilizza has_nav_menu() e verifica theme_location invece di menu_id:

<?php
if ( has_nav_menu( $theme_location ) ) {
    // L'utente ha assegnato un menu a questa posizione;
    // mostralo
    wp_nav_menu( array( 
        'theme_location' => $theme_location, 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

Puoi mostrare contenuti alternativi aggiungendo una clausola else.

MODIFICA

Devi sostituire $theme_location con il tuo effettivo theme_location:

<?php
if ( has_nav_menu( 'main_nav' ) ) {
    // L'utente ha assegnato un menu a questa posizione;
    // mostralo
    wp_nav_menu( array( 
        'theme_location' => 'main_nav', 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>
2 nov 2011 21:59:00
Commenti

Anche se questo non restituisce nulla se non c'è un menu, purtroppo fa lo stesso quando il menu esiste. Qualche altra idea?

Ryan Ryan
2 nov 2011 23:23:03

Hai assegnato un menu alla posizione del tema specificata?

Chip Bennett Chip Bennett
2 nov 2011 23:28:52

No, come posso farlo?

Ryan Ryan
2 nov 2011 23:32:57

Dashboard -> Aspetto -> Menu. Crea e salva un menu personalizzato, quindi applicalo alla posizione del tema specificata, utilizzando il menu a discesa.

Chip Bennett Chip Bennett
2 nov 2011 23:34:23

Ah sì, l'avevo fatto (screenshot: http://bit.ly/vrjNf9). Sfortunatamente, il problema persiste ancora - il menu non appare. P.S. Il mio file functions.php contiene questo: if (function_exists('register_nav_menus')) { register_nav_menus ( array('main_nav' => 'Menu di Navigazione Principale'));}

Ryan Ryan
2 nov 2011 23:37:25

Puoi aggiornare la tua domanda con il codice di output attuale e corrente?

Chip Bennett Chip Bennett
2 nov 2011 23:40:22

Vedi la risposta aggiornata; nel caso tu abbia preso alla lettera la mia abbreviazione, ho chiarito l'array degli argomenti della chiamata wp_nav_menu(). :)

Chip Bennett Chip Bennett
2 nov 2011 23:41:54

Ho aggiornato la domanda con il tuo codice aggiornato, ma ancora non mostra il menu (non sta producendo alcun HTML). C'è altro che posso provare?

Ryan Ryan
2 nov 2011 23:46:17

Devi usare la tua posizione del tema effettiva, ad esempio main_nav, non la variabile segnaposto $theme_location. Vedi la risposta aggiornata.

Chip Bennett Chip Bennett
2 nov 2011 23:51:14
Mostra i restanti 4 commenti
2

Puoi semplicemente specificare false come argomento fallback_cb di wp_nav_menu. Non verrà visualizzato nulla - piuttosto, wp_nav_menu restituirà false (senza emettere alcun output).

<?php
wp_nav_menu(array( 
    'theme_location' => $main_nav, 
    'menu_class'     => 'nav', 
    'container'      => '',
    'fallback_cb'    => false
));
3 nov 2011 00:06:56
Commenti

Questo mi ha salvato la vita! Ah mi stava facendo impazzire :)

Omid Ariyan Omid Ariyan
22 gen 2021 13:37:33
1

Puoi semplicemente registrare il menu inizialmente senza specificare la posizione.
In functions.php:

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

E quando richiami il menu in header.php, verifica con has_nav_menu():

if ( has_nav_menu( 'header' ) ) {
    wp_nav_menu( array( 'theme_location' => 'header' ) ); 
}
27 nov 2012 01:30:20
Commenti

Se registri un menu senza una posizione nel tema, non potrai richiederlo in seguito con una restrizione di posizione nel tema.

fuxia fuxia
27 nov 2012 06:33:40
3

Leggi questo:

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

imposta 'fallback_cb' => false e nulla verrà visualizzato, questo è il metodo standard suggerito dagli sviluppatori di WordPress.

6 ott 2013 14:20:04
Commenti

È la stessa risposta di chrisguitarguy...

brasofilo brasofilo
6 ott 2013 16:02:47

Lo so, volevo solo indirizzarti all'articolo principale sul codex di WordPress.

Hooman Askari Hooman Askari
10 ott 2013 17:34:51

Sembra che non sia vero. La documentazione dice:

Se non viene fornito un parametro theme_location, la funzione mostra https://developer.wordpress.org/reference/functions/wp_nav_menu/#more-information il menu che corrisponde all'ID, slug o nome fornito dal parametro menu; altrimenti, il primo menu non vuoto; altrimenti (o se il menu fornito da menu è vuoto), l'output della funzione fornita dal parametro fallback_cb (wp_page_menu(), di default); altrimenti niente.

Alireza Alireza
6 nov 2018 16:46:53