Come verificare se un menu esiste in WordPress?

8 ott 2013, 19:26:51
Visualizzazioni: 16.2K
Voti: 5

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?

8
Commenti

Per favore modifica la tua domanda per aggiungere il codice dove registri le tue sidebar dinamiche.

Chip Bennett Chip Bennett
8 ott 2013 19:37:13

Non ho registrato questo come una sidebar dinamica. Devo farlo? Ho semplicemente nominato i miei file sidebar come sidebar-nome.php e poi ho usato get_sidebar('nome') quando necessario.

justlemons justlemons
8 ott 2013 20:13:03

Ok, cosa intendi quando usi il termine sidebar. Può significare almeno 3 cose: 1) una sidebar di contenuto (HTML), 2) un'area widgetizzata (dynamic_sidebar()), o 3) un file template-part (get_sidebar()/sidebar.php).

Chip Bennett Chip Bennett
8 ott 2013 20:16:22

Scusa per la confusione. Intendevo un file template-part.

justlemons justlemons
8 ott 2013 20:19:16

Oh cielo, ora capisco quanto fosse confusionario. Sto lavorando con i menu di navigazione di Wordpress. Semplicemente li sto posizionando in una sidebar.

justlemons justlemons
8 ott 2013 20:25:20

Okay, adesso puoi postare il tuo codice register_nav_menus()?

Chip Bennett Chip Bennett
8 ott 2013 20:38:35

Anch'io non lo sto usando. Sto semplicemente utilizzando wp_nav_menu() e get_sidebar() nei miei file template. Ad esempio, il codice che ho elencato nel mio post proviene da un file chiamato sidebar-nav.php. Utilizzo questa sidebar in un template di pagina personalizzato usando get_sidebar('nav').

justlemons justlemons
8 ott 2013 20:53:57

Se non registri le posizioni dei menu nel tema, allora non stai usando wp_nav_menu() correttamente e probabilmente non riuscirai a risolvere questa domanda. Ti consiglio di consultare il Codex per wp_nav_menu() e register_nav_menus().

Chip Bennett Chip Bennett
8 ott 2013 20:56:22
Mostra i restanti 3 commenti
Tutte le risposte alla domanda 2
6
10

Supponendo che tu abbia implementato correttamente i menu di navigazione personalizzati:

  1. Registrazione delle posizioni dei menu nel tema:

    register_nav_menus( array(
        'parent_page' => "Pagina Genitore",
        'page_a' => "Pagina A",
        'page_b' => "Pagina B", //ecc
    ) );
    
  2. 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' ) );
}
8 ott 2013 21:00:59
Commenti

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.

justlemons justlemons
9 ott 2013 00:19:06

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

Chip Bennett Chip Bennett
9 ott 2013 00:21:59

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

Chip Bennett Chip Bennett
9 ott 2013 00:23:47

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.

justlemons justlemons
9 ott 2013 00:25:37

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.

justlemons justlemons
9 ott 2013 00:35:19

Penso ancora che ci sia un modo più semplice per gestire quello che stai cercando di fare. Se vuoi entrare in chat, probabilmente potremmo risolverlo...

Chip Bennett Chip Bennett
9 ott 2013 00:56:03
Mostra i restanti 1 commenti
0

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
}
8 dic 2015 05:58:27