wp_nav_menu: menüyü yalnızca biri varsa göster, aksi halde hiçbir şey gösterme


11

Wp_nav_menu yalnızca bir menü varsa görüntülemek için kullanmaya çalışıyorum, aksi takdirde, hiçbir şey görüntülemek.

Menüyü silersem, sayfaların bir listesini çıkarır.

Benim fonksiyonları.php dosya içerir:

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

Wp_nav_menu'yu yalnızca bir menü varsa görüntülemek için nasıl kullanabilirim, yoksa hiçbir şey göstermez?

Yanıtlar:


19

Şunun yerine kullanın has_nav_menu()ve test edin :theme_locationmenu_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' => '' 
    ) );
}
?>

Bir elsemadde ekleyerek alternatif içerik çıktısı alabilirsiniz .

DÜZENLE

Sen değiştirmeniz gerekiyor $theme_locationsenin ile gerçek 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' => '' 
    ) );
}
?>

Menü yoksa, hiçbir şey çıktı almazken , bir menü olduğunda maalesef aynı şeyi yapar . Başka fikir var mı?
— Ryan

Belirtilen Tema Konumuna bir menü uyguladınız mı?
— Chip Bennett

Hayır, bunu nasıl yaparım?
— Ryan

1
Dashboard -> Appearance -> Menus. Özel bir menü oluşturun ve kaydedin, ardından açılır menüyü kullanarak belirtilen Tema Konumuna uygulayın.
— Chip Bennett

Ah evet, bunu yapmıştım (ekran görüntüsü: bit.ly/vrjNf9 ). Ne yazık ki, sorun hala devam ediyor - menü görünmeyecek. PS İşlev dosyamda şunlar var: if (function_exists ('register_nav_menus')) {register_nav_menus (dizi ('main_nav' => 'Ana Gezinme Menüsü'));}
— Ryan


0

Konumu belirtmeden önce menüyü kaydettirmeniz yeterlidir.
İçinde functions.php:

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

Menüyü aradığınızda şunları header.phpkontrol edin has_nav_menu():

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

Eğer bir menü kayıt varsa olmadan bir tema konumu, daha sonra bunun için soramazsın ile bir tema konum kısıtlaması.
— fuxia

0

Oku bunu:

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

set 'fallback_cb' => false ve hiçbiri görüntülenmeyecek, bu wp guys tarafından önerilen standart yöntemdir.


Bu chrisguitarguy cevap ile aynı ...
— brasofilo

Biliyorum, sadece wordpress kodeksindeki ana makaleye dikkat çekmek istedim.
— Hooman Askari

Görünüşe göre bu doğru değil. Dokümanlar şunları söylüyor: Bir tema_konumu parametresi verilmezse, bu işlev, geliştirici.wordpress.org/ reference/functions/wp_nav_menu/… menü parametresi tarafından verilen kimliğe, bilgi dosyasına veya ada sahip menüyü görüntüler; aksi takdirde, boş olmayan ilk menü; aksi takdirde (veya menü tarafından verilen menü boşsa), fallback_cb parametresi tarafından verilen işlevin çıktısı (varsayılan olarak wp_page_menu ()); aksi halde hiçbir şey.
— Alireza
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.