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

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

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

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

  1. Предоставляем функции параметр $nav_menu_items — массив объектов элементов меню, который очень удобно получить при помощи wp_get_nav_menu_items().
  2. Указываем в параметрах также ID элемента, дочерние элементы которого нужно получить.
  3. Из предоставленного массива функция отбирает нужные нам элементы и возвращает их также в виде массива объектов.
/**
* Возвращает дочерние элементы пункта меню
*
* @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 и потом где хотите используете на сайте.

Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

По теме