wp_nav_menu: afișează meniul doar dacă există, altfel nu afișa nimic

2 nov. 2011, 21:48:43
Vizualizări: 20.9K
Voturi: 14

Încerc să folosesc wp_nav_menu pentru a afișa un meniu doar dacă acesta există, altfel să nu afișeze nimic.

Dacă șterg meniul, acesta va afișa o listă cu paginile.

Fișierul meu functions.php conține:

if (function_exists('register_nav_menus')) {
register_nav_menus (
array('main_nav' => 'Meniul Principal de Navigare'));}

Cum pot folosi wp_nav_menu pentru a afișa meniul doar dacă acesta există, altfel să nu afișeze nimic?

0
Toate răspunsurile la întrebare 4
9
24

Folosește has_nav_menu() și testează pentru theme_location, în loc de menu_id:

<?php
if ( has_nav_menu( $theme_location ) ) {
    // Utilizatorul a atribuit un meniu acestei locații;
    // afișează-l
    wp_nav_menu( array( 
        'theme_location' => $theme_location, 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

Poți afișa conținut alternativ, adăugând o clauză else.

EDITARE

Trebuie să înlocuiești $theme_location cu adevăratul theme_location:

<?php
if ( has_nav_menu( 'main_nav' ) ) {
    // Utilizatorul a atribuit un meniu acestei locații;
    // afișează-l
    wp_nav_menu( array( 
        'theme_location' => 'main_nav', 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>
2 nov. 2011 21:59:00
Comentarii

Deși aceasta nu afișează nimic dacă nu există un meniu, din păcate face același lucru și atunci când există un meniu. Aveți alte sugestii?

Ryan Ryan
2 nov. 2011 23:23:03

Ați aplicat un meniu la Locația de Temă specificată?

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

Nu, cum pot face asta?

Ryan Ryan
2 nov. 2011 23:32:57

Dashboard -> Aspect -> Meniuri. Creează și salvează un meniu personalizat, apoi aplică-l la locația de temă specificată, folosind meniul dropdown.

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

Ah da, am făcut asta (captură de ecran: http://bit.ly/vrjNf9). Din păcate, problema persistă - meniul nu apare. P.S. Fișierul meu functions.php conține asta: if (function_exists('register_nav_menus')) { register_nav_menus ( array('main_nav' => 'Meniu Principal de Navigare'));}

Ryan Ryan
2 nov. 2011 23:37:25

Poți să actualizezi întrebarea ta cu codul tău real, curent de output?

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

Vezi răspunsul actualizat; în caz că ai luat prescurtarea mea prea literal, am clarificat argumentele array-ului pentru apelul wp_nav_menu(). :)

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

Am actualizat întrebarea cu codul tău actualizat, dar încă nu afișează meniul (nu generează niciun HTML deloc). Mai este ceva ce pot încerca?

Ryan Ryan
2 nov. 2011 23:46:17

Trebuie să folosești Locația reală din Temă, de ex. main_nav, nu variabila substituibilă $theme_location. Vezi răspunsul actualizat.

Chip Bennett Chip Bennett
2 nov. 2011 23:51:14
Arată celelalte 4 comentarii
2

Poți specifica pur și simplu false ca argument fallback_cb pentru wp_nav_menu. Nu va apărea nimic - mai degrabă, wp_nav_menu va returna false (fără a afișa nimic).

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

Asta a fost salvatoare! Ah, mă enerva deja :)

Omid Ariyan Omid Ariyan
22 ian. 2021 13:37:33
1

Puteți înregistra mai întâi meniul fără a specifica locația.
În functions.php:

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

Și când afișați meniul în header.php, verificați cu has_nav_menu():

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

Dacă înregistrezi un meniu fără o locație în temă, nu îl poți solicita mai târziu cu o restricție de locație în temă.

fuxia fuxia
27 nov. 2012 06:33:40
3

Citește asta:

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

setează 'fallback_cb' => false și nu va fi afișat nimic, aceasta este metoda standard recomandată de echipa WordPress.

6 oct. 2013 14:20:04
Comentarii

Acesta este același răspuns ca cel al lui chrisguitarguy...

brasofilo brasofilo
6 oct. 2013 16:02:47

Știu, voiam doar să vă atrag atenția asupra articolului principal din WordPress Codex.

Hooman Askari Hooman Askari
10 oct. 2013 17:34:51

Se pare că nu este adevărat. Documentația spune:

Dacă nu i se dă un parametru theme_location, funcția afișează https://developer.wordpress.org/reference/functions/wp_nav_menu/#more-information meniul care se potrivește cu ID-ul, slug-ul sau numele dat de parametrul menu; în caz contrar, primul meniu ne-gol; în caz contrar (sau dacă meniul dat de parametrul menu este gol), rezultatul funcției date de parametrul fallback_cb (wp_page_menu(), implicit); altfel, nimic.

Alireza Alireza
6 nov. 2018 16:46:53