Come verificare se un menu esiste in WordPress?
Sto attualmente recuperando un menu di navigazione basato sul titolo della pagina genitore, e se la pagina non ha un genitore allora uso il proprio titolo.
global $post;
$page_title;
if ($post->post_parent) {
$page_title = get_the_title($post->post_parent);
} else {
$page_title = get_the_title($post);
}
$sidebar_title = 'Sidebar - '.$page_title;
wp_nav_menu(array( 'menu' => $sidebar_title));
Invece di controllare prima il genitore, vorrei verificare se una pagina ha il proprio menu unico. Questo è ciò che ho scritto ma non funziona:
global $post;
$page_title = get_the_title($post);
$sidebar_title = 'Sidebar - '.$page_title;
if ( !wp_nav_menu(array( 'menu' => $sidebar_title, 'echo' => false )) ) {
$page_title = get_the_title($post->post_parent);
$sidebar_title = 'Sidebar - '.$page_title;
}
wp_nav_menu(array( 'menu' => $sidebar_title ));
TLDR: Come faccio a verificare se un menu esiste?

Supponendo che tu abbia implementato correttamente i menu di navigazione personalizzati:
Registrazione delle posizioni dei menu nel tema:
register_nav_menus( array( 'parent_page' => "Pagina Genitore", 'page_a' => "Pagina A", 'page_b' => "Pagina B", //ecc ) );
Chiamare correttamente
wp_nav_menu()
:wp_nav_menu( array( 'theme_location' => 'page_a' );
...puoi quindi utilizzare il condizionale has_nav_menu()
per determinare se una posizione del tema ha un menu assegnato:
if ( has_nav_menu( 'page_a' ) ) {
// fai qualcosa
}
Nel tuo caso specifico, potresti fare qualcosa del genere:
if ( has_nav_menu( 'page_a' ) ) {
wp_nav_menu( array( 'theme_location' => 'page_a' ) );
} else {
wp_nav_menu( array( 'theme_location' => 'parent_page' ) );
}

Grazie per la tua risposta. Questo è il primo sito web che ho sviluppato utilizzando Wordpress, e non ero a conoscenza della necessità di registrare i miei menu di navigazione. Ho letto il materiale che mi hai suggerito. Tuttavia, sono riuscito a risolvere il mio problema senza registrarli. Penso che funzioni per i miei scopi dato che il mio cliente non avrà bisogno della possibilità di gestire le posizioni dei menu di navigazione.
Se pensi che questo mi possa causare problemi in futuro, per favore fammelo sapere.

"il mio cliente non avrà bisogno della possibilità di gestire le posizioni dei menu di navigazione" - allora perché avere menu di navigazione? (No: seriamente.) Perché non usare semplicemente wp_list_pages()
o wp_page_menu()
? Perché se l'utente non sta definendo i menu di navigazione, allora non c'è letteralmente nessuna ragione per usare wp_nav_menu()
.

Inoltre: sono confuso dal titolo della tua domanda: come capire se un menu esiste?. Se l'utente non sta definendo i menu, come potranno mai esistere dei menu? Sospetto che ci sia qualcos'altro, più profondo, che stai realmente cercando di ottenere - e sospetto che probabilmente ci sia un modo più semplice di quello che stai attualmente seguendo. :)

Anche se il mio cliente non gestirà la posizione dei menu, avrà comunque la possibilità di aggiungere nuovi elementi a quei menu se lo desidera.

Ho diverse pagine sul sito e ogni pagina genitore ha un menu di navigazione unico. Alcune pagine figlie hanno anche menu di navigazione unici, ma non tutte. Per quelle pagine figlie che non hanno menu di navigazione unici, voglio che utilizzino il menu di navigazione della loro pagina genitore. Quindi, quello che sto verificando è se esiste un menu di navigazione unico per poterlo visualizzare, e se la pagina non ha un menu di navigazione unico, allora voglio visualizzare il menu di navigazione della pagina genitore.

Credo di star facendo una cosa simile all'OP: permettere al mio cliente (utente amministratore di WordPress) di creare Menu (in WP-Admin > Aspetto > Menu), che NON sono assegnati a una posizione specifica del tema, perché ciò richiederebbe una relazione statica/uno-a-uno.
Invece, questi Menu vengono visualizzati dinamicamente (tramite un widget personalizzato), in base al nome dell'antenato superiore della pagina corrente. Se quel nome corrisponde al nome di un Menu esistente, mostra il Menu (racchiuso dal codice HTML standard before/after del widget). Ma, se NON c'è corrispondenza, non viene restituito nulla.
Quindi avevo bisogno di verificare se il Menu esisteva, prima di iniziare l'output del widget.
$args = array(
'menu' => $menu_name, // dall'antenato superiore della pagina corrente
'echo' => 0, // true o 0
'theme_location' => '__fake', // valore fittizio, per evitare la visualizzazione del primo menu reale
'fallback_cb' => false // previene la visualizzazione del primo menu reale
);
$menu = wp_nav_menu( $args );
if ($menu){
# output
echo $before_widget; // Prima
echo $before_title . $title . $after_title; // Titolo
echo $menu;
echo $after_widget; // Dopo
}
