wp_nav_menu: pokaż menu tylko jeśli istnieje, w przeciwnym razie nic nie pokaż


11

Próbuję użyć wp_nav_menu, aby wyświetlić menu tylko wtedy, gdy istnieje, w przeciwnym razie nic nie wyświetlaj.

Jeśli usunę menu, wyświetli się lista stron.

Mój plik functions.php zawiera:

if (function_exists('register_nav_menus')) {
register_nav_menus (
array('main_nav' => 'Main Navigation Menu'));}

Jak mogę użyć wp_nav_menu, aby wyświetlić menu tylko wtedy, gdy istnieje, w przeciwnym razie nic nie pokazuj?

Odpowiedzi:


19

Użyj has_nav_menu()i przetestuj theme_locationzamiast menu_id:

<?php
if ( has_nav_menu( $theme_location ) ) {
    // User has assigned menu to this location;
    // output it
    wp_nav_menu( array( 
        'theme_location' => $theme_location, 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

Możesz wyświetlać alternatywną treść, dodając elseklauzulę.

EDYTOWAĆ

Trzeba wymienić $theme_locationze swoją rzeczywistą theme_location :

<?php
if ( has_nav_menu( 'main_nav' ) ) {
    // User has assigned menu to this location;
    // output it
    wp_nav_menu( array( 
        'theme_location' => 'main_nav', 
        'menu_class' => 'nav', 
        'container' => '' 
    ) );
}
?>

Chociaż nic nie wyświetla, jeśli nie ma menu, niestety robi to samo, gdy jest menu. Jakieś inne pomysły?
Ryan,

Czy zastosowałeś menu do określonej lokalizacji motywu?
Chip Bennett,

Nie, jak to zrobić?
Ryan,

1
Dashboard -> Appearance -> Menus. Utwórz i zapisz niestandardowe menu, a następnie zastosuj je do określonej lokalizacji motywu, korzystając z menu rozwijanego.
Chip Bennett

Ach tak, zrobiłem to (zrzut ekranu: bit.ly/vrjNf9 ). Niestety problem nadal występuje - menu nie pojawi się. PS Mój plik funkcji ma to: if (function_exists ('register_nav_menus')) {register_nav_menus (array ('main_nav' => 'Main Menu nawigacji'));}
Ryan


0

Możesz najpierw zarejestrować menu bez określania lokalizacji.
W functions.php:

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

A kiedy wywołasz menu header.php, sprawdź has_nav_menu():

if ( has_nav_menu( 'header' ) ) {
    wp_nav_menu( array( 'theme_location' => 'header' ) ); 
}

Jeśli zarejestrujesz menu bez lokalizacji motywu, nie możesz poprosić o to później z ograniczeniem lokalizacji motywu.
fuxia

0

Przeczytaj to:

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

ustaw 'fallback_cb' => false i żaden nie będzie wyświetlany, jest to standardowa metoda sugerowana przez wp facetów.


Jest to to samo, co odpowiedź chrisguitarguy ...
brasofilo

Wiem, chciałem tylko zwrócić uwagę na główny artykuł na temat kodeksu wordpress.
Hooman Askari,

Wydaje się, że to nieprawda. Dokumenty mówią: Jeśli nie podano parametru motyw_lokacji, funkcja wyświetla developer.wordpress.org/reference/functions/wp_nav_menu/... menu pasujące do identyfikatora, informacji o pracy lub nazwy podanej przez parametr menu; w przeciwnym razie pierwsze niepuste menu; w przeciwnym razie (lub jeśli menu podane przez menu jest puste), wyjście funkcji określonej przez parametr fallback_cb (domyślnie wp_page_menu ()); inaczej nic.
Alireza,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.