Dostosowywanie tylko określonego menu za pomocą haka „wp_nav_menu_items”?

36

Dzięki pomocy tutaj udało mi się dodać niestandardowe pole wyszukiwania do mojego menu głównego ... dodając to do funkcji mojego motywu. Php

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

Jednak dodałem teraz inne menu do wstawienia w stopce, ale pole wyszukiwania również zostało dodane do tego. Jak dodać pole wyszukiwania tylko do menu głównego?

Mój kod do rejestrowania menu to:

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

 ) );

... a kod do wyświetlenia menu pomocniczego to:

wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'secondary' ) ); 
Cannyboy
źródło

Odpowiedzi:

41

Aby dodać niestandardowe pole wyszukiwania tylko do menu głównego, możesz przekazać drugi parametr dostarczony przez filtr wp_nav_menu_items i sprawdzić, czy lokalizacja_kategorii jest główną lokalizacją

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
źródło
3
dzięki, to świetnie ... tylko pytanie dla początkujących - co robi 10, 2kod?
cannyboy
4
10jest priorytetem (domyślnie jest dziesięć), 2jest liczbą argumentów, które funkcja, którą przechwytujemy, aby zaakceptować filtr.
Rarst
@ ampt, Tak, próbowałem tego. Zadziałało. prawie. Kiedy się loguję, moje drugie menu znikają, jak mogę to rozwiązać?
1
Zauważ, że od WP 3.8 zmienną jest $ args-> menu zamiast $ args-> theme_location
Alain Jacomet Forte
@AlainJacometForte W rzeczywistości $ args-> menu zwraca numeryczny identyfikator menu, podczas gdy $ args-> theme_location zwraca ciąg, więc ta odpowiedź jest nadal poprawna. Nic się nie zmieniło, jeśli porównasz ciągi.
Marcus
8

Alternatywną metodą tego jest dodanie slugu menu do filtra wp_nav_menu_items.

Załóżmy na przykład, że masz menu o nazwie Nagłówek i zawsze chcesz, aby to menu (niezależnie od tego, czy jest dołączone do lokalizacji motywu, czy nie) wyświetlało pole wyszukiwania. Możesz to zrobić, dodając ślimak menu, w tym przypadku header, do filtra.

Nowy filtr wyglądałby następująco:

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

Zwróć uwagę na headerczęść nowego filtra. To powie WordPressowi, do jakiego menu dodać funkcję.

To tylko jeden inny sposób podejścia do obecnego problemu.

Justin Kopepasah
źródło
Zobacz element z @oshi na tej stronie, który jest do Ciebie skierowany.
halfer