Kustomisasi Hanya Menu Tertentu menggunakan Hook “wp_nav_menu_items”?

36

Berkat bantuan di sini, saya berhasil menambahkan kotak pencarian khusus ke menu utama saya ... dengan menambahkan ini ke functions.php tema saya

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>";
}

Namun, saya sekarang telah menambahkan menu lain untuk dimasukkan ke dalam footer, tetapi kotak pencarian juga akan ditambahkan ke ini. Bagaimana saya menambahkan kotak pencarian ke menu utama saja?

Kode saya untuk mendaftarkan menu adalah:

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

 ) );

..dan kode untuk menampilkan menu sekunder adalah:

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

Jawaban:

41

Untuk hanya menambahkan kotak pencarian khusus ke menu utama, Anda dapat melewatkan parameter kedua yang disediakan oleh filter wp_nav_menu_items dan memeriksa apakah theme_location adalah lokasi utama

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;
}
ampt
sumber
3
terima kasih, itu hebat ... hanya pertanyaan pemula - apa fungsinya 10, 2dalam kode?
cannyboy
4
10adalah prioritas (sepuluh adalah default), 2adalah sejumlah argumen yang berfungsi kami kaitkan untuk menerima filter.
Rarst
@ ampt, Ya, saya mencobanya. Itu berhasil. hampir. Ketika saya masuk, menu kedua saya menghubungkan menghilang, bagaimana saya bisa menyelesaikannya?
1
Perhatikan bahwa pada WP 3.8, variabelnya adalah $ args-> menu alih-alih $ args-> theme_location
Alain Jacomet Forte
@AlainJacometForte Sebenarnya, menu $ args-> mengembalikan ID numerik dari menu, sementara $ args-> theme_location mengembalikan string, jadi jawaban ini masih benar seperti itu. Tidak ada yang berubah jika Anda membandingkan string.
Marcus
8

Metode alternatif untuk melakukan ini adalah menambahkan menu slug ke filter wp_nav_menu_items.

Misalnya, katakanlah Anda memiliki menu bernama Header dan Anda selalu ingin menu ini (apakah itu dilampirkan ke lokasi tema atau tidak) untuk menampilkan kotak pencarian. Anda dapat melakukannya dengan menambahkan siput menu, dalam hal ini header, ke filter.

Filter baru adalah sebagai berikut:

add_filter ( 'wp_nav_menu_header_items' , 'search_box_function' );   

Perhatikan headerbagian dari filter baru. Ini memberi tahu WordPress apa menu untuk menambahkan fungsi.

Ini hanyalah satu cara berbeda untuk mendekati masalah Anda saat ini.

Justin Kopepasah
sumber
Lihat item dari @oshi di halaman ini, yang ditujukan kepada Anda.
halfer