wp_nav_menu_(menu_slug)_items
Позволяет изменить уже сгенерированный HTML код пунктов у каждого меню в отдельности на основании его slug.
Через фильтр проходит примерно следующее содержимое:
<li id="menu-item-265" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-265"> <a href="http://wp-test.ru/post-99">Обратная связь</a> </li> <li id="menu-item-266" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-266"> <a href="http://wp-test.ru/post-98">Все статьи</a> </li> <li id="menu-item-267" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-267"> <a href="http://wp-test.ru/post-97">Карта сайта</a> </li>
Использование
add_filter( 'wp_nav_menu_(menu_slug)_items', 'wp_kama_nav_menu_slug_items_filter', 10, 2 ); /** * Function for `wp_nav_menu_(menu_slug)_items` filter-hook. * * @param string $items The HTML list content for the menu items. * @param stdClass $args An object containing wp_nav_menu() arguments. * * @return string */ function wp_kama_nav_menu_slug_items_filter( $items, $args ){ // filter... return $items; }
- $items(строка)
- HTML код пунктов конкретного меню.
- $args(stdClass)
- Объект с параметрами, переданными функции wp_nav_menu().
Примеры
#1 Добавим форму поиска в меню
Пусть меню имеет название "Моё меню", тогда название фильтра будет:
// Без плагина транслитерации wp_nav_menu_%d0%bc%d0%be%d1%91-%d0%bc%d0%b5%d0%bd%d1%8e_items // С плагином транслитерации wp_nav_menu_moyo-menyu_items
Добавим в меню со slug = moyo-menyu
форму поиска:
add_filter( 'wp_nav_menu_moyo-menyu_items', 'change_nav_my_menu_items', 10, 2 ); function change_nav_my_menu_items( $items, $args ) { $items .= '<li>' . get_search_form( false ) . '</li>'; return $items; }
Список изменений
С версии 3.0.0 | Введена. |
Где вызывается хук
wp_nav_menu_(menu_slug)_items
wp-includes/nav-menu-template.php 278
$items = apply_filters( "wp_nav_menu_{$menu->slug}_items", $items, $args );