wp_nav_menu: mostra il menu solo se esiste, altrimenti non mostrare nulla
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?
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' => ''
) );
}
?>

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

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

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'));}

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

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()
. :)

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?

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
));

Sembra di no: https://developer.wordpress.org/reference/functions/wp_nav_menu/#more-information

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' ) );
}

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.

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

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.
