Настройка конкретного меню с помощью хука "wp_nav_menu_items"

23 сент. 2010 г., 17:14:20
Просмотры: 53K
Голосов: 43

Благодаря помощи на этом форуме, мне удалось добавить поле поиска в главное меню... добавив следующий код в 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' ) ); 
0
Все ответы на вопрос 2
6
46

Чтобы добавить пользовательское поле поиска только в главное меню, вы можете использовать второй параметр фильтра 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;
}
23 сент. 2010 г. 17:36:08
Комментарии

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

cannyboy cannyboy
23 сент. 2010 г. 17:45:10

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

Rarst Rarst
23 сент. 2010 г. 18:25:34

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

User User
5 окт. 2011 г. 02:59:49

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

Alain Jacomet Forte Alain Jacomet Forte
26 мар. 2014 г. 23:00:51

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

Marcus Marcus
25 мая 2014 г. 18:37:08

Использование $args->menu вместо $args->theme_location сработало для меня в версии 4.3

shaunsantacruz shaunsantacruz
21 авг. 2015 г. 20:29:52
Показать остальные 1 комментариев
1

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

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

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

add_filter( 'wp_nav_menu_header_items', 'search_box_function' );

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

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

19 дек. 2012 г. 22:30:10
Комментарии

Смотрите сообщение от @oshi на этой странице, адресованное вам.

halfer halfer
2 янв. 2013 г. 03:39:16