Воспроизведение вывода иерархического списка из категорий списка wp() с помощью функции получить категории()


Мне нужно больше контроля над выводом списка категорий, поэтому я использую get_categories(), вместо того, чтобы wp_list_categories().

Эта функция возвращает плоский массив объектов, упорядоченных по определенному атрибуту. Как я могу построить иерархический список из него, как это делает wp_list_categories()?

Author: Sven, 2010-11-19

2 answers

Наиболее идеальным решением для обхода данных является использование класса WordPress walker.

Http://codex.wordpress.org/Function_Reference/Walker_Class

Вы не найдете много примеров его использования в Интернете, но один из них был приведен здесь Скрибу.

Http://scribu.net/wordpress/extending-the-category-walker.html

Вы также можете ознакомиться с классами, которые использует WordPress для дальнейшего расширения walker примеры.

Http://core.trac.wordpress.org/browser/tags/3.0.1/wp-includes/classes.php

Надеюсь, это поможет..

 4
Author: t31os, 2010-11-19 23:32:48

Как построить иерархическое дерево из get_categories

См. этот вопрос о переполнении стека . В ответе Ян Фабри делает это так:

$categories = get_categories();

// First index all categories by parent id, for easy lookup later
$cats_by_parent = array();
foreach ($categories as $cat)
{
  $parent_id = $cat->category_parent;
  if (!array_key_exists($parent_id, $cats_by_parent)) 
  {
    $cats_by_parent[$parent_id] = array();
  }
  $cats_by_parent[$parent_id][] = $cat;
}

// Then build a hierarchical tree
$cat_tree = array();
function add_cats_to_bag(&$child_bag, &$children)
{
   global $cats_by_parent;
   foreach ($children as $child_cat) 
   {
     $child_id = $child_cat->cat_ID;
     if (array_key_exists($child_id, $cats_by_parent)) 
     {
        $child_cat->children = array();
        add_cats_to_bag($child_cat->children, $cats_by_parent[$child_id]);
     }
     $child_bag[$child_id] = $child_cat;
   }
}
add_cats_to_bag($cat_tree, $cats_by_parent[0]);
 1
Author: edelwater, 2019-04-05 21:46:40