Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP wordpress获取类别对象的多维数组_Php_Wordpress_Categories - Fatal编程技术网

PHP wordpress获取类别对象的多维数组

PHP wordpress获取类别对象的多维数组,php,wordpress,categories,Php,Wordpress,Categories,我试图将wordpress上的所有类别作为category类型的多维对象数组。 wordpress中有两个函数可以实现我想要的功能,但不完全是: 1) get_categories()-这个函数确实返回一个category对象数组,这很好,但是这个数组是一个平面数组,其中没有区分哪个类别是父类别还是子类别 2) wp_list_categories()-它可以完整地返回类别,但问题是返回值是html,我需要类别仍然是对象 例如,如果我有以下3棵树作为我的父级less类别: /* tree_stu

我试图将wordpress上的所有类别作为category类型的多维对象数组。 wordpress中有两个函数可以实现我想要的功能,但不完全是:

1) get_categories()-这个函数确实返回一个category对象数组,这很好,但是这个数组是一个平面数组,其中没有区分哪个类别是父类别还是子类别

2) wp_list_categories()-它可以完整地返回类别,但问题是返回值是html,我需要类别仍然是对象

例如,如果我有以下3棵树作为我的父级less类别:

/*
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);