列出Wordpress中的所有分类/类别及其子项(即使它们是空的)

时间:2017-09-01 16:04:50

标签: wordpress

我想在帖子中显示所有子类别。目前,我可以列出帖子类别,但不能列出该类别中的所有子类别。

我试过了:

print_r (get_categories(array('child_of' => 2)));

但该功能仅显示帖子的类别,而不是所有子类别。

Wordpress函数中是否有函数可以获取所有子项以及类别?

1 个答案:

答案 0 :(得分:1)

默认情况下,

get_categories应该返回子类别,所以如果你没有得到任何类别我怀疑它是因为它们是空的(默认情况下get_categories只返回有与之关联的帖子的类别)。

根据您的需要,有几种方法可以获取所有类别:

<强> 1。获取类别和子女的完整列表

通过将“hide_empty”设置为0,您可以使用get_categories将所有类别和子类别返回到数组,即使它们没有帖子:

$cat_id = 2; // category id to get (for ALL categories, change to 0 or remove from arg array)
$categories = get_categories(array("child_of" => $cat_id, "hide_empty" => 0));

// print all category names
foreach ($categories as $category)
    echo $category->name;

返回值 :返回包含所有类别和子类别的数组。请注意,这是没有一个雇佣结构,即父母和子女都处于同一级别

<强> 2。显示包含存档页面链接的分层列表

wp_list_categories会将所有类别和子项作为列表返回,并包含指向存档页面的链接。

$cat_id = 2; // category id to get (for ALL categories, change to 0 or remove from arg array)
$categories = wp_list_categories(array("child_of" => $cat_id, "echo" => 1, "hide_empty" => 0));
echo $categories;

如果hide_empty为1,则只会返回包含帖子的类别,因此请将其设置为0以返回所有类别。

还有许多其他参数,包括“深度”指定要返回的级别,以及“orderby”指定顺序。见Developer Reference

返回值 :所有类别的分层ul无序列表的html,其子类别嵌套在其父级下。所有类别都按名称显示,并带有类别存档页面的链接。

第3。获取类别对象的分层数组

我编写了以下函数,该函数使用递归来获取所有类别/分类术语的多维数组,其中子项嵌套在父项下。

<强> 参数:

  • $catId如果您想获取特定类别的孩子,请传递类别ID。对于所有类别,请使用0
  • $taxonomy将分类名称作为第二个参数传递。默认为“category”
  • $bEchoList如果要将类别/术语名称打印为分层无序列表,请将true作为最后一个参数传递。

功能:

function getCategoryHierarchy($catId=0, $taxonomy="category", $bEchoList = false ){

    $args = array(
        "hide_empty" => 0,
        "hierarchical" => 1,
        "taxonomy"=> $taxonomy,
        "parent" => $catId
    );

    $categories = get_categories($args);

    if(count($categories) > 0){

        if ($bEchoList) echo "<ul>";

        foreach ($categories as $category) {
            if ($bEchoList)
                echo "<li>".$category->cat_name."</li>";

            $cats[$category->cat_ID]["category"] =  $category;

            $children = getCategoryHierarchy($category->cat_ID, $taxonomy, $bEchoList );
            if ($children)
                $cats[$category->cat_ID]["children"] = $children;
        }
        if ($bEchoList) echo "</ul>";
    }
    return $cats;
}

$cat_id = 2; // category id to get (for ALL categories, change to 0 or remove from parameters)
$categories = getCategoryHierarchy($cat_id, "category", true );


返回值 :返回包含所有类别/分类词和子项的分层数组。它们是分层嵌套的,类别id作为数组。

每个类别数组都有2个“子阵列”

  • “category”键:包含类别WP_Term对象
  • “children”键:如果该类别有任何子项,则它们将包含在同一结构中(即具有类别和子子阵列)

返回数组结构:

[*CATID*] => Array(
        [category] => WP_Term Object(...)
        [children] => Array(

                [*CATID*] => Array(
                        [category] => WP_Term Object(...)
                        [children] => Array(

                               [*CATID*] => Array(
                               [category] => WP_Term Object(...)
                           )
                    )

               [more children...]
            )
    )

[*CATID*] => Array(
        [category] => WP_Term Object(...)
    )

    [more categories...]