walker_nav_menu_start_el хук-фільтрWP 3.0.0

Дозволяє змінити вихід початкового елемента пункту меню.

Початковий елемент пункту меню за умовчанням формується так (код із ядра):

$item_output = $args->before;
$item_output .= '<a'. $attributes .'>';
$item_output .= $args->link_before . $title . $args->link_after;
$item_output .= '</a>';
$item_output .= $args->after;

Тобто фільтр пропускає через себе сформований html код посилання пункту меню із включеним до нього значеннями параметрів before, link_before, link_afterта after.

В даний час немає фільтра для зміни <li> і </li> елемент меню, щоб це зробити доводиться писати свій аналог класу Walker_Nav_Menu .

Використання

add_filter( 'walker_nav_menu_start_el', 'wp_kama_walker_nav_menu_start_el_filter', 10, 4);

/**
 * Function for `walker_nav_menu_start_el` filter-hook.
 *
 * @param string $item_output У menu item's starting HTML output.
 * @param WP_Post $menu_item Menu item data object.
 * @param int $depth Відомості про меню. Використовується для padding.
 * @param stdClass $args An object of wp_nav_menu() arguments.
 *
 * @return string
 */
function wp_kama_walker_nav_menu_start_el_filter( $item_output, $menu_item, $depth, $args ){

	// Filter...
	return $item_output;
}
$item_output
(рядок)
HTML код початкового елемента пункту меню (
<a>…</a> ).
$item
(WP_Post)

Об’єкт поточного меню. Приклад:

WP_Post Object
(
	[ID] => 265
	[post_author] => 1
	[post_date] => 2018-04-07 09:45:46
	[post_date_gmt] => 2018-04-07 06:45:46
	[post_content] =>
	[post_title] => Зворотній зв'язок
	[post_excerpt] =>
	[post_status] => publish
	[comment_status] => closed
	[ping_status] => closed
	[post_password] =>
	[post_name] => 265
	[to_ping] =>
	[pinged] =>
	[post_modified] => 2018-04-19 00:20:29
	[post_modified_gmt] => 2018-04-18 21:20:29
	[post_content_filtered] =>
	[post_parent] => 0
	[guid] => http://wp-test.ru/?p=265
	[menu_order] => 1
	[post_type] => nav_menu_item
	[post_mime_type] =>
	[comment_count] => 0
	[filter] => raw
	[db_id] => 265
	[menu_item_parent] => 0
	[object_id] => 214
	[object] => page
	[type] => post_type
	[type_label] => Сторінка
	[url] => http://wp-test.ru/post-99
	[title] => Зворотній зв'язок
	[target] =>
	[attr_title] =>
	[description] =>
	[classes] => Array
		(
			[0] =>
			[1] => menu-item
			[2] => menu-item-type-post_type
			[3] => menu-item-object-page
		)

	[xfn] =>
	[current] =>
	[current_item_ancestor] =>
	[current_item_parent] =>
)
$depth
(число)
Рівень пункту меню. Використовується для відступів. Верхні пункти меню мають $depth = 0, вкладені у яких $depth = 1 тощо. Доданий до версії 4.1.0.
$args
(stdClass)

Об’єкт з параметрами функції wp_nav_menu() . Приклад:

stdClass Object
(
	[menu] => WP_Term Object
		(
			[term_id] => 21
			[name] => Моє перше меню
			[slug] => moe-pervoe-menu
			[term_group] => 0
			[term_taxonomy_id] => 21
			[taxonomy] => nav_menu
			[description] =>
			[parent] => 0
			[count] => 3
			[filter] => raw
		)

	[container] => div
	[container_class] =>
	[container_id] =>
	[menu_class] => primary-menu
	[menu_id] =>
	[echo] => 1
	[fallback_cb] => wp_page_menu
	[before] =>
	[after] =>
	[link_before] =>
	[link_after] =>
	[items_wrap] => <ul id="%1$s" class="%2$s">%3$s</ul>
	[item_spacing] => preserve
	[depth] => 0
	[walker] =>
	[theme_location] => primary
)

Приклади

0

#1 Обернемо посилання в контейнер div

add_filter( 'walker_nav_menu_start_el', 'filter_walker_nav_menu_start_el', 10, 4);

function filter_walker_nav_menu_start_el( $item_output, $item, $depth, $args ) {
	return '<div class="wrap-link">' . $item_output . '</div>';
}

Нехай меню зі структурою:

  • Овочі
  • Моя стаття
    • Ще стаття

І має html код:

<div class="menu-vtoroe-menyu-container">
	<ul id="menu-vtoroe-menyu" class="menu">
		<li id="menu-item-317" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-317">
			<a href="http://wp-test.ru/category/ovoshhi">Овочі</a>
		</li>
		<li id="menu-item-322" class="menu-item menu-item-type-post_type menu-item-object-post menu-item-has-children menu-item-322">
			<a href="http://wp-test.ru/moya-statya">Моя стаття</a>
			<ul class="sub-menu">
				<li id="menu-item-321" class="menu-item menu-item-type-post_type menu-item-object-post menu-item-321">
					<a href="http://wp-test.ru/eshhyo-statya">Ще стаття</a>
				</li>
			</ul>
		</li>
	</ul>
</div>

Тоді при застосуванні фільтра з прикладу html код стане:

<div class="menu-vtoroe-menyu-container">
	<ul id="menu-vtoroe-menyu" class="menu">
		<li id="menu-item-317" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-317">
			<div class="wrap-link">
				<a href="http://wp-test.ru/category/ovoshhi">Овочі</a>
			</div>
		</li>
		<li id="menu-item-322" class="menu-item menu-item-type-post_type menu-item-object-post menu-item-has-children menu-item-322">
			<div class="wrap-link">
				<a href="http://wp-test.ru/moya-statya">Моя стаття</a>
			</div>
			<ul class="sub-menu">
				<li id="menu-item-321" class="menu-item menu-item-type-post_type menu-item-object-post menu-item-321">
					<div class="wrap-link">
						<a href="http://wp-test.ru/eshhyo-statya">Ще стаття</a>
					</div>
				</li>
			</ul>
		</li>
	</ul>
</div>

список змін

З версії 3.0.0Введено.

Де викликається хук

Де використовується хук у WordPress

Використання не знайдено.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *