Налаштування лише конкретного меню за допомогою гачка “wp_nav_menu_items”?


36

Завдяки деякій допомозі тут мені вдалося додати спеціальне поле пошуку до мого головного меню ... додавши це до функцій моєї теми.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' ) ); 

Відповіді:


41

Щоб додати лише спеціальне поле пошуку до головного меню, ви можете передати другий параметр, який надає фільтр wp_nav_menu_items, і перевірити, чи тема_локації є основним місцеположенням

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

3
дякую, це чудово ... просто питання для новачків - що 10, 2робити в коді?
cannyboy

4
10є пріоритетним (десять за замовчуванням), 2- це кількість аргументів, функція, яку ми підключаємо до фільтра.
Рарст

@ ampt, Так, я спробував це. Це спрацювало. майже. Коли я входжу в систему, моє друге посилання відпадає, як я можу це вирішити?

1
Зауважте, що станом на WP 3.8 змінною є $ args-> меню замість $ args-> theme_location
Alain Jacomet Forte

@AlainJacometForte Насправді меню $ args-> повертає числовий ідентифікатор меню, тоді як $ args-> topic_location повертає рядок, тож ця відповідь все-таки правильна, як є. Нічого не змінилося, якщо ви порівнюєте рядки.
Маркус

8

Альтернативним методом цього є додавання меню до фільтру wp_nav_menu_items.

Наприклад, скажімо, що у вас є меню під назвою Header, і ви завжди хочете, щоб це меню (незалежно від того, додано воно до місця теми чи ні) відображало вікно пошуку. Це можна зробити, додавши в цей headerфільтр фільтр , в цьому випадку , слизьку.

Новий фільтр буде таким:

add_filter (  'wp_nav_menu_header_items' , 'search_box_function' );  

Помітьте headerчастину нового фільтра. Це повідомляє WordPress, в яке меню додати функцію.

Це лише один різний спосіб підійти до вашої поточної проблеми.


Дивіться елемент від @oshi на цій сторінці, який адресовано вам.
півзахисник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.