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.