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.