I need more control over the category listing output, so I'm using get_categories()
, instead of wp_list_categories()
.
This function returns a flat array of objects ordered by a certain attribute. How can I build a hierarchical list from it like wp_list_categories()
does?
I need more control over the category listing output, so I'm using get_categories()
, instead of wp_list_categories()
.
This function returns a flat array of objects ordered by a certain attribute. How can I build a hierarchical list from it like wp_list_categories()
does?
2 Answers
Reset to default 4The most ideal solution for walking over the data is to use the WordPress walker class.
http://codex.wordpress/Function_Reference/Walker_Class
You won't find many an example around the web for using it, but one was given by Scribu here.
http://scribu/wordpress/extending-the-category-walker.html
You can also look to the classes WordPress uses to extend the walker as further examples.
http://core.trac.wordpress/browser/tags/3.0.1/wp-includes/classes.php
Hope that helps..
How to build a hierarchical tree from get_categories
See this Stack Overflow question. In the answer Jan Fabry does it like this:
$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]);
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745622021a4636575.html
评论列表(0条)