WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

nav_menu_item_argsхук-фильтрWP 4.4.0

Позволяет изменить параметры (аргументы) отдельного элемента меню навигации (wp_nav_menu).

Использование

add_filter( 'nav_menu_item_args', 'wp_kama_nav_menu_item_args_filter', 10, 3 );

/**
 * Function for `nav_menu_item_args` filter-hook.
 * 
 * @param stdClass $args      An object of wp_nav_menu() arguments.
 * @param WP_Post  $menu_item Menu item data object.
 * @param int      $depth     Depth of menu item. Used for padding.
 *
 * @return stdClass
 */
function wp_kama_nav_menu_item_args_filter( $args, $menu_item, $depth ){

	// filter...
	return $args;
}
$args(stdClass)

Объект с аргументами, передаваемыми в функцию wp_nav_menu().

Например:

stdClass Object
(
	[menu] => WP_Term Object
		(
			[term_id] => 22
			[name] => Второе меню
			[slug] => vtoroye-menyu
			[term_group] => 0
			[term_taxonomy_id] => 22
			[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
)
$item(WP_Post)

Объект с данными пункта меню. Например:

WP_Post Object
(
	[ID] => 268
	[post_author] => 1
	[post_date] => 2018-04-07 09:46:17
	[post_date_gmt] => 2018-04-07 06:46:17
	[post_content] =>
	[post_title] =>
	[post_excerpt] =>
	[post_status] => publish
	[comment_status] => closed
	[ping_status] => closed
	[post_password] =>
	[post_name] => 268
	[to_ping] =>
	[pinged] =>
	[post_modified] => 2018-04-18 01:21:48
	[post_modified_gmt] => 2018-04-17 22:21:48
	[post_content_filtered] =>
	[post_parent] => 0
	[guid] => http://wp-test.ru/?p=268
	[menu_order] => 1
	[post_type] => nav_menu_item
	[post_mime_type] =>
	[comment_count] => 0
	[filter] => raw
	[db_id] => 268
	[menu_item_parent] => 0
	[object_id] => 113
	[object] => post
	[type] => post_type
	[type_label] => Запись
	[url] => http://wp-test.ru/post-105
	[title] => Запись 105
	[target] =>
	[attr_title] =>
	[description] =>
	[classes] => Array
		(
			[0] =>
			[1] => menu-item
			[2] => menu-item-type-post_type
			[3] => menu-item-object-post
		)

	[xfn] =>
	[current] =>
	[current_item_ancestor] =>
	[current_item_parent] =>
)
$depth(число)
Уровень пункта меню. Добавлен в версии 4.1.0. Используется для отступов. Верхние пункты меню имеют $depth = 0, вложенные в них $depth = 1 и так далее.

Примеры

-1

#1 Добавление иконок к пунктам меню

Добавляет иконку к ссылкам меню, прикрепленное к области меню primary:

function change_menu_item_args( $args ) {
	if ( $args->theme_location == 'primary' ) {
		$args->link_before = '<span class="dashicons dashicons-admin-links"></span>';
	}

	return $args;
}

add_filter( 'nav_menu_item_args', 'change_menu_item_args' );

Добавляет иконку к ссылкам всех меню, где пункт меню - страница, остальные элементы выведутся как обычно (без иконки):

function change_menu_item_args( $args, $item ) {
	if ( $item->object == 'page' ) {
		$args->link_before = '<span class="dashicons dashicons-admin-links"></span>';
	}

	return $args;
}

add_filter( 'nav_menu_item_args', 'change_menu_item_args', 10, 2 );

Добавляет иконку к ссылкам верхнего уровня во всех меню:

function change_menu_item_args( $args, $item, $depth ) {
	if ( $depth === 0 ) {
		$args->link_before = '<span class="dashicons dashicons-admin-links"></span>';
	}

	return $args;
}

add_filter( 'nav_menu_item_args', 'change_menu_item_args', 10, 3 );

Добавляет иконки к ссылкам пунктов меню, которые удовлетворяют всем трём условиям:

function change_menu_item_args( $args, $item, $depth ) {
	if ( $args->theme_location == 'primary' && $item->object == 'page' && $depth === 0 ) {
		$args->link_before = '<span class="dashicons dashicons-admin-links"></span>';
	}

	return $args;
}

add_filter( 'nav_menu_item_args', 'change_menu_item_args', 10, 3 );

Список изменений

С версии 4.4.0 Введена.

Где вызывается хук

Walker_Nav_Menu::start_el()
nav_menu_item_args
wp-includes/class-walker-nav-menu.php 163
$args = apply_filters( 'nav_menu_item_args', $args, $menu_item, $depth );

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

Использование не найдено.
campusboy 4748youtube.com/c/wpplus
Создатель YouTube канала wp-plus, на котором делюсь своим опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
Редакторы: Kama 9616
5 комментариев
    Войти