Как вывести дочерние пункты конкретного элемента меню?

Владислав Белецкий
Владислав Белецкий .
Категория:
Комментариев: 0

Мне очень часто приходилось сталкиваться с тем, что возможностей функции wp_nav_menu() не хватало для того, чтобы получить то меню, которое мне было нужно.

Иногда проблема решалась при помощи волкера, иногда при помощи не всем известной wp_get_nav_menu_items(), но порой приходилось придумывать более изощрённые способы вывода пунктов. В ходе одного из таких способов я и использовал функцию, которую вы видите ниже.

Преимущество функции в том, что она не делает запросов в базу данных или куда-то ещё, а работает с уже предоставленным ей списком элементов, алгоритм такой:

/**
* Возвращает дочерние элементы пункта меню
*
* @param целое ID родительского элемента
* @param массив Массив объектов элементов меню, по которым будет проходить отбор
* @param логическое Нужно ли учитывать дочерние элементы всех уровней вложенности
* @return массив Массив объектов дочерних элементов
*/
function true_get_nav_menu_children_items( $parent_id, $nav_menu_items, $dpth = true ) {
	$dochernie = array();
	foreach ( (array) $nav_menu_items as $nav_item ) {
		if ( $nav_item->menu_item_parent == $parent_id ) {
			$dochernie[] = $nav_item;
 
			// если вам не нужны дочерние всех уровней вложенности, то даже можете удалить следующие 5 строк кода
			if ( $dpth ) {
				if ( $dch = get_nav_menu_item_children( $nav_item->ID, $nav_menu_items ) )
					$dochernie = array_merge( $dochernie, $dch );
				}
			}
		}
	}
	return $dochernie;
}

Вот по сути и всё — добавляете её в functions.php и потом где хотите используете на сайте.

По теме

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии