PHP wordpress获取类别对象的多维数组
我试图将wordpress上的所有类别作为category类型的多维对象数组。 wordpress中有两个函数可以实现我想要的功能,但不完全是: 1) get_categories()-这个函数确实返回一个category对象数组,这很好,但是这个数组是一个平面数组,其中没有区分哪个类别是父类别还是子类别 2) wp_list_categories()-它可以完整地返回类别,但问题是返回值是html,我需要类别仍然是对象 例如,如果我有以下3棵树作为我的父级less类别:PHP wordpress获取类别对象的多维数组,php,wordpress,categories,Php,Wordpress,Categories,我试图将wordpress上的所有类别作为category类型的多维对象数组。 wordpress中有两个函数可以实现我想要的功能,但不完全是: 1) get_categories()-这个函数确实返回一个category对象数组,这很好,但是这个数组是一个平面数组,其中没有区分哪个类别是父类别还是子类别 2) wp_list_categories()-它可以完整地返回类别,但问题是返回值是html,我需要类别仍然是对象 例如,如果我有以下3棵树作为我的父级less类别: /* tree_stu
/*
tree_stump
tree1
branch1
tree2
branch2
twig2
leaves2
flowers2
fruits2
*/
我正在尝试获取一个返回值,该值可能类似于:
$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 ) ) ) );
其中多维数组的每个成员仍然是一个对象,并且在所有子数组中,第一个成员是其余成员的父对象。我想这需要一些递归的东西——让我紧张的东西
我不确定我说的是否有道理,如果我需要更清楚的话,请告诉我。。
感谢阅读。get_categories()返回一个数组,其中包含许多可用于构建数组的属性。即$category->category\u parent
和$category->parent
这就是我所做的:
首先使用get_categories()获取数组。然后将其转换为一个新数组。
我假设原始数组中的所有子对象都低于其父对象
$cats_tree = array();
foreach($categories as $category){
$parent = $category->parent;
if ( $parent && isset($cats_tree[$parent]) ){
$cats_tree[$parent]->children[$category->cat_ID] = $category;
}else{
$cats_tree[$category->cat_ID] = $category;
}
}
希望这对某些人仍然有用这是我的版本,它假设$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;
}
谢谢David,但我希望得到更多帮助,尤其是递归位。如果类别嵌套深度超过2级,这种方法将失败。假设以下结构:父[ID:1]>子[ID:2]>孙子[ID:3]。生成$cats_tree[1]=WP_Term->children[2]=WP_Term,生成$cats_tree[3]=WP_Term;(为伪代码感到抱歉)第三级最终显示为顶级的同级。不过,递归patrick64答案运行良好
<?php
$args = array(
'taxonomy' => 'category',
'orderby' => 'name',
'order' => 'ASC',
'hierarchical' => true,
'hide_empty' => false,
);
$the_query = new WP_Term_Query($args);
$categories = $the_query->get_terms();
function get_cat_tree($parent,$categories) {
$result = array();
foreach($categories as $category){
if ($parent == $category->parent) {
$category->children = get_cat_tree($category->term_id,$categories);
$result[] = $category;
}
}
return $result;
}
$cats_tree = get_cat_tree(0,$categories);