WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

wp_nav_menu_(menu->slug)_items хук-фильтр . WP 3.0.0

Позволяет изменить уже сгенерированный 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', 'filter_function_name_5900', 10, 2 );
function filter_function_name_5900( $items, $args ){
	// Делаем что-либо...

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

Где используется хук

wp_nav_menu() остальные хуки:

Код хука-фильтра wp_nav_menu_(menu->slug)_items

Фрагмент из: wp-includes/nav-menu-template.php VER 4.9.8
...
	 *
	 * @param string   $items The HTML list content for the menu items.
	 * @param stdClass $args  An object containing wp_nav_menu() arguments.
	 */
	$items = apply_filters( 'wp_nav_menu_items', $items, $args );
	/**
	 * Filters the HTML list content for a specific navigation menu.
	 *
	 * @since 3.0.0
	 *
	 * @see wp_nav_menu()
	 *
	 * @param string   $items The HTML list content for the menu items.
	 * @param stdClass $args  An object containing wp_nav_menu() arguments.
	 */
	$items = apply_filters( "wp_nav_menu_{$menu->slug}_items", $items, $args );

	// Don't print any markup if there are no items at this point.
	if ( empty( $items ) )
		return false;

	$nav_menu .= sprintf( $args->items_wrap, esc_attr( $wrap_id ), esc_attr( $wrap_class ), $items );
	unset( $items );

	if ( $show_container )
		$nav_menu .= '</' . $args->container . '>';

	/**
	 * Filters the HTML content for navigation menus.
	 *
	 * @since 3.0.0
...
campusboy 3060youtube.com/c/wpplus
Создатель YouTube канала wp-plus, на котором делюсь своим опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
Комментариев нет
    Здравствуйте, !     Войти . Зарегистрироваться