Intereting Posts
Как использовать пользовательский код Javascript внутри плагина? Простой запрос JQuery AJAX не позволяет запустить PHP Script Создание кнопки раскрывающегося списка и фильтра для двух пользовательских таксономий, назначенных для пользовательского типа сообщения Как изменить запись в зависимости от источника трафика? Изменение изображения в медиатеке в определенное время WP_Query или Simple Loop: петли не работают на пользовательских страницах или файлах шаблонов Вставить сообщение перед контентом после заголовка Почему мой шаблон no-results.php перемещает боковую панель и нижний колонтитул в основной контейнер? wp_enqueue_script не загружает скрипты вообще Изменить CSS / форматирование на определенной странице, но не страницы в целом? Вытягивать сообщения из всех категорий, если количество не выполняется? Что делает extract (shortcode_atts (array (do? Понимание wp_enqueue_style Тема двадцать десять – как разместить разные заголовки на каждой странице Импорт живого сайта в локальную настройку без доступа к сайту

Создание меню / подменю из подкатегории категории и сообщений

У меня есть пользовательское меню, состоящее из страниц и категорий, и я пытаюсь вывести категорию и подкатегории, а также последние 4 сообщения из каждой категории / подкатегории.

При попытке использовать класс walker я заимствовал из примера класса

function walk( $elements, $max_depth) { $args = array_slice(func_get_args(), 2); $output = ''; if ($max_depth < -1) //invalid parameter return $output; if (empty($elements)) //nothing to walk return $output; $id_field = $this->db_fields['id']; $parent_field = $this->db_fields['parent']; // flat display if ( -1 == $max_depth ) { $empty_array = array(); foreach ( $elements as $e ) $this->display_element( $e, $empty_array, 1, 0, $args, $output ); return $output; } /* * need to display in hierarchical order * separate elements into two buckets: top level and children elements * children_elements is two dimensional array, eg. * children_elements[10][] contains all sub-elements whose parent is 10. */ $top_level_elements = array(); $children_elements = array(); foreach ( $elements as $e) { if ( 0 == $e->$parent_field ) { $top_level_elements[] = $e; $child_posts = array(); if($e->object == 'category') { $child_cats = blankslate_get_menu_categories($e->object_id); // custom function to get categories of category $child_posts = blankslate_get_menu_posts($e->object_id, 'post', 4, true); // custom function to get posts of category if(!empty($child_cats)) { $child_posts = array_merge($child_cats, $child_posts); $output = $this->walk($child_cats, 0); } } else $child_posts = blankslate_get_menu_posts($e->object_id, $e->object); if(!empty($child_posts)) $e->classes[] = "menu-item-has-children"; foreach ( $child_posts as $child ) { $child = wp_setup_nav_menu_item($child); $child->post_type = 'nav_menu_item'; $child->menu_item_parent = $e->$id_field; $child->ID = $e->$id_field.$child->ID; $children_elements[ $e->$id_field ][] = $child; $children_elements_classes[] = $child; } } else { $children_elements[ $e->$parent_field ][] = $e; } } /* * when none of the elements is top level * assume the first one must be root of the sub elements */ if ( empty($top_level_elements) ) { $first = array_slice( $elements, 0, 1 ); $root = $first[0]; $top_level_elements = array(); $children_elements = array(); foreach ( $elements as $e) { if ( $root->$parent_field == $e->$parent_field ) { $top_level_elements[] = $e; if($e->object == 'category') { $child_cats = blankslate_get_menu_categories($e->object_id); $child_posts = blankslate_get_menu_posts($e->object_id, 'post', 4, true); if(!empty($child_cats)) { $child_posts = array_merge($child_cats, $child_posts); } } else $child_posts = blankslate_get_menu_posts($e->object_id, $e->object); if(!empty($child_posts)) $e->classes[] = 'menu-item-has-children'; foreach ( $child_posts as $child ) { $child = wp_setup_nav_menu_item($child); $child->post_type = 'nav_menu_item'; $child->menu_item_parent = $e->$id_field; $child->ID = $e->$id_field.$child->ID; $children_elements[ $e->$id_field ][] = $child; $children_elements_classes[] = $child; } } else { $children_elements[ $e->$parent_field ][] = $e; } } } //assing the classes to our dynamically populated posts if ( isset($children_elements_classes) ) _wp_menu_item_classes_by_context($children_elements_classes); foreach ( $top_level_elements as $e ) $this->display_element( $e, $children_elements, $max_depth, 0, $args, $output ); /* * if we are displaying all levels, and remaining children_elements is not empty, * then we got orphans, which should be displayed regardless */ if ( ( $max_depth == 0 ) && count( $children_elements ) > 0 ) { $empty_array = array(); foreach ( $children_elements as $orphans ) foreach( $orphans as $op ) $this->display_element( $op, $empty_array, 1, 0, $args, $output ); } return $output; } 

Однако я не уверен, как перебирать категории, чтобы получить подкатегории и столбцы в глубину. Может ли кто-нибудь посоветовать мне, какие шаги я могу предпринять для этого класса занятий?