SIn*_*dhu 3 php wordpress categories
我试图将我的 wordpress 上的所有类别作为类别类型对象的层次结构多维数组。wordpress 中有 2 个函数可以做我想做的事,但不完全是:
1) get_categories() - 这个确实返回了一个类别对象数组,这很好,但该数组是一个平面数组,其中没有区分哪个类别是父类别或哪个类别是子类别。
2) wp_list_categories() - 它可以返回具有完整层次结构的类别,但问题是返回值是html,我需要类别仍然是对象。
例如,如果我有以下 3 棵树作为我的无父类别:
/*
tree_stump
tree1
branch1
tree2
branch2
twig2
leaves2
flowers2
fruits2
*/
Run Code Online (Sandbox Code Playgroud)
我正在尝试获得一个可能类似于以下内容的返回值:
$cat_tree=array( 1=>$tree_stump,2=>array(1=>$tree1,2=>$branch1),3=>array(1=>$tree2,2=>array(1=>$branch2,2=>array($twig2,$leaves2,$flowers2,$fruits2 ) ) ) );
Run Code Online (Sandbox Code Playgroud)
其中 multi dim 数组的每个成员仍然是一个对象,并且在所有子数组中,第一个是其余成员的父级。我想这需要一些递归的东西 - 让我紧张的东西!
不确定我是否有道理,如果我需要更清楚,请告诉我..感谢阅读。
小智 5
这是我的版本,它假定 $categories 是 get_categories() 的输出,但它们的顺序无关紧要。
$cats_tree = get_cat_tree(0,$categories);
function get_cat_tree($parent,$categories) {
$result = array();
foreach($categories as $category){
if ($parent == $category->category_parent) {
$category->children = get_cat_tree($category->cat_ID,$categories);
$result[] = $category;
}
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)