Настраивать только определенное меню с помощью крючка «wp_nav_menu_items»?

36

Благодаря некоторой помощи здесь, мне удалось добавить пользовательское окно поиска в мое главное меню ... добавив это в functions.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>";
}

Тем не менее, теперь я добавил еще одно меню, чтобы добавить его в нижний колонтитул, но к нему добавляется и окно поиска. Как добавить окно поиска только в основное меню?

Мой код для регистрации меню:

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

 ) );

..и код для отображения вторичного меню:

wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'secondary' ) ); 
cannyboy
источник

Ответы:

41

Чтобы добавить только настраиваемое поле поиска в главное меню, вы можете передать второй параметр, предоставленный фильтром wp_nav_menu_items, и проверить, является ли theme_location основным местоположением.

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
источник
3
спасибо, это здорово ... просто вопрос новичка - что делает 10, 2код?
cannyboy
4
10является приоритетом (по умолчанию десять), 2это число аргументов, которые принимает функция, которую мы перехватываем для фильтрации.
2010 года
@ ampt, да, я попробовал это. Это сработало. почти. Когда я вхожу в систему, ссылки на мое второе меню исчезают, как я могу это решить?
1
Обратите внимание, что начиная с WP 3.8, переменная $ args-> menu вместо $ args-> theme_location
Ален Жакомет Форте
@AlainJacometForte На самом деле, $ args-> menu возвращает числовой идентификатор меню, в то время как $ args-> theme_location возвращает строку, поэтому этот ответ по-прежнему верен так, как он есть. Ничего не изменилось, если вы сравниваете строки.
Маркус
8

Альтернативный способ сделать это - добавить фрагмент меню в фильтр wp_nav_menu_items.

Например, допустим, у вас есть меню с именем «Заголовок», и вы всегда хотите, чтобы это меню (независимо от того, прикреплено ли оно к расположению темы или нет) отображало окно поиска. Вы можете сделать это, добавив фрагмент меню, в данном случае header, к фильтру.

Новый фильтр будет выглядеть следующим образом:

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

Обратите внимание на headerчасть нового фильтра. Это сообщает WordPress, в какое меню добавить функцию.

Это всего лишь один из подходов к вашей текущей проблеме.

Джастин Копепасах
источник
Смотрите пункт @oshi на этой странице, который адресован вам.
13