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

Мне очень часто приходилось сталкиваться с тем, что возможностей функции 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 и потом где хотите используете на сайте.

Источник: misha.blog

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

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: