Настройка конкретного меню с помощью хука "wp_nav_menu_items"
Благодаря помощи на этом форуме, мне удалось добавить поле поиска в главное меню... добавив следующий код в 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='Поиск'></form></li>";
}
Однако, когда я добавил еще одно меню для подвала сайта, поле поиска добавляется и в него тоже. Как можно добавить поле поиска только в основное меню?
Мой код для регистрации меню:
register_nav_menus( array(
'primary' => __( 'Основная навигация', 'twentyten' ),
'secondary'=>__('Вторичное меню', 'twentyten' ),
) );
..и код для отображения вторичного меню:
wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'secondary' ) );
Чтобы добавить пользовательское поле поиска только в главное меню, вы можете использовать второй параметр фильтра 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='Поиск'></form></li>";
return $nav;
}

спасибо, это отлично... просто вопрос новичка - что делает 10, 2
в коде?

10
это приоритет (десять по умолчанию), 2
это количество аргументов, которые принимает функция, к которой мы подключаем фильтр.

@ampt, Да, я пробовал это. Сработало. Почти. Когда я вхожу в систему, ссылки моего второго меню исчезают, как это можно исправить?

Обратите внимание, что начиная с WP 3.8 переменная называется $args->menu вместо $args->theme_location

@AlainJacometForte На самом деле, $args->menu возвращает числовой ID меню, а $args->theme_location возвращает строку, поэтому этот ответ по-прежнему корректен в таком виде. Ничего не изменилось, если вы сравниваете строки.

Альтернативный метод выполнения этого — добавление слага меню в фильтр wp_nav_menu_items.
Например, допустим, у вас есть меню с названием Header, и вы хотите, чтобы это меню (прикреплено ли оно к расположению в теме или нет) всегда отображало поле поиска. Вы можете сделать это, добавив слаг меню, в данном случае header
, в фильтр.
Новый фильтр будет выглядеть следующим образом:
add_filter( 'wp_nav_menu_header_items', 'search_box_function' );
Обратите внимание на часть header
в новом фильтре. Это указывает WordPress, к какому меню добавить функцию.
Это всего лишь один из альтернативных способов решения вашей текущей задачи.
