“Wp_nav_menu_items” Hook ile Sadece Belirli Bir Menüyü Özelleştirmek?


36

Buradaki bazı yardımlar sayesinde, ana menüme özel bir arama kutusu eklemeyi başardım ...

add_filter('wp_nav_menu_items','search_box_function');
  function search_box_function ($nav){
  return $nav."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Search'></form></li>";
}

Ancak, şimdi altbilgiye koymak için başka bir menü ekledim, ancak arama kutusu da buna eklendi. Arama kutusunu sadece ana menüye nasıl eklerim?

Menü kaydetme kodum:

register_nav_menus( array(
  'primary' => __( 'Primary Navigation', 'twentyten' ),
  'secondary'=>__('Secondary Menu', 'twentyten' ),

 ) );

..ve ikincil menüyü görüntülemek için kod:

wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'secondary' ) ); 

Yanıtlar:


41

Özel menüyü sadece ana menüye eklemek için wp_nav_menu_items filtresi tarafından sağlanan ikinci parametreyi geçebilir ve theme_location'ın birincil konum olup olmadığını kontrol edebilirsiniz.

add_filter('wp_nav_menu_items','search_box_function', 10, 2);
function search_box_function( $nav, $args ) {
    if( $args->theme_location == 'primary' )
        return $nav."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Search'></form></li>";

    return $nav;
}

3
teşekkürler, bu harika ... sadece bir acemi soru - 10, 2kodunda ne yapar ?
cannyboy

4
10öncelik (on varsayılan), 2kabul etmek için takmaya çalıştığımız fonksiyon sayısıdır.
Rarst

@ ampt, Evet, denedim. İşe yaradı. neredeyse. Giriş yaptığımda, ikinci menü bağlantılarım kayboluyor, bunu nasıl çözebilirim?

1
WP 3.8'den itibaren, değişkenin $ args-> theme_location yerine $ args-> menu olduğunu unutmayın
Alain Jacomet Forte

@AlainJacometForte Aslında, $ args-> menü, menünün sayısal kimliğini döndürürken, $ args-> theme_location dizeyi döndürür, bu nedenle bu cevap hala doğrudur. Dizeleri karşılaştırırken hiçbir şey değişmedi.
Marcus,

8

Bunu yapmanın alternatif bir yöntemi de, menü slug'unu wp_nav_menu_items filtresine eklemektir.

Örneğin, Başlık adında bir menünüz olduğunu ve bu menünün her zaman (bir tema konumuna ekli olsun olmasın) bir arama kutusu görüntülemesini istediğinizi varsayalım. Bunu, menü sümüklü sesini, bu durumda headerfiltreye ekleyerek yapabilirsiniz .

Yeni filtre aşağıdaki gibi olacaktır:

add_filter ('wp_nav_menu_header_items', 'search_box_function');
( 'wp_nav_menu_header_items', 'search_box_function' );

headerYeni filtrenin kısmına dikkat edin . Bu, WordPress'e hangi işlevi ekleyeceğinizi söyler.

Bu, şu anki sorununuza yaklaşmanın sadece bir farklı yoludur.


Size gönderilen bu sayfadaki @oshi öğesine bakın.
Ocak'ta 13'ünde
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.