wp_nav_menu_objects хук-фільтрWP 3.1.0

Дозволяє змінити відсортований список об’єктів пунктів меню, перш ніж на їх основі буде згенеровано HTML-код меню.

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

add_filter( 'wp_nav_menu_objects', 'wp_kama_nav_menu_objects_filter', 10, 2);

/**
 * Function for `wp_nav_menu_objects` filter-hook.
 *
 * @param array $sorted_menu_items Докладно про те, що я маю menu order.
 * @param stdClass $args An object containing wp_nav_menu() arguments.
 *
 * @return array
 */
function wp_kama_nav_menu_objects_filter( $sorted_menu_items, $args ){

	// Filter...
	return $sorted_menu_items;
}
$sorted_menu_items
(масив)
Масив із об’єктами елементів меню, відсортованих за ключом
menu_order. Тобто, порядок елементів повторює порядок пунктів, виставлених в адмін-панелі при створенні меню.
$args
(stdClass)
Об’єкт параметрів, переданих функції
wp_nav_menu() .

Приклади

1

#1 Видалимо один із пунктів меню

Завдання: для авторизованих користувачів потрібно видалити пункти, які ведуть на сторінку авторизації з усіх меню. Знаючи ID цієї сторінки, це можна зробити так:

## Видалимо один із пунктів меню
add_filter( 'wp_nav_menu_objects', 'change_nav_menu_objects', 10, 2);
function change_nav_menu_objects( $sorted_menu_items, $args ) {
	foreach ( $sorted_menu_items as $index => $item ) {
		if ( is_user_logged_in() && 'page' == $item->object && 214 == $item->object_id ) {
			unset($sorted_menu_items[$index]);
		}
	}

	return $sorted_menu_items;
}
0

#2 Додамо батьківським елементам меню свій css клас

add_filter( 'wp_nav_menu_objects', 'add_css_class_for_menu_item_has_child_elements' );

function add_css_class_for_menu_item_has_child_elements( $items ) {
	// Збираємо ID пунктів меню, які мають дочірні елементи
	$parents = wp_list_pluck( $items, 'menu_item_parent' );

	foreach ($ items as $ item) {
		// Перевіряємо, чи відноситься до них поточний в циклі пункт меню і додаємо css клас
		if ( in_array( $item->ID, $parents ) ) {
			$item->classes[] = 'has-child-elements';
		}
	}

	return $items;
}
0

#3 Додамо активному елементу меню свій css клас

Активним елементом меню називають той, на сторінці якого знаходиться користувач.

add_filter( 'wp_nav_menu_objects', 'add_css_class_for_current_menu_item' );

function add_css_class_for_current_menu_item( $items ) {
	foreach ($ items as $ item) {
		if ($ item-> current) {
			$item->classes[] = 'current-element';
		}
	}

	return $items;
}

список змін

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

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

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

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

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

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