获取父类别的所有子类别

时间:2020-03-09 作者:Arg Geo

如何通过提供父类别ID或slug来获取特定父类别(不在帖子中)的子类别列表(包括空的)?我需要3层深度。示例:picture

迄今为止我的代码:

function smart_category_top_parent_id ($catid) {
    while ($catid) {
       $cat = get_category($catid); // get the object for the catid
       $catid = $cat->category_parent; // assign parent ID (if exists) to $catid
      // the while loop will continue whilst there is a $catid
      // when there is no longer a parent $catid will be NULL so we can assign our $catParent
       $catParent = $cat->cat_ID;
    }
return $catParent;

$page_id = get_queried_object_id();

$category = get_the_category($page_id);

$catid = $category[0]->cat_ID;

$top_level_cat = smart_category_top_parent_id ($catid);

$post_terms = wp_get_object_terms( $post->ID, \'category\', array( \'fields\' => \'ids\' ) );

$terms = wp_list_categories( array(
    \'title_li\' => \'\',
    \'style\'    => \'none\',
    \'echo\'     => false,
    \'taxonomy\' => \'category\',
    \'include\'  => $top_level_cat,
    \'show_count\' => 1,
    \'child_of\' => 0,
    \'separator\' => \'<br />\',
    \'style\' => \'list\',
    \'hide_empty\' => 0,
    \'include\' => $post_terms
   ) );

   return $terms;
上面的代码仅显示顶级父类别,而不显示子类别。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

作为对更新代码的回复,您应该知道$post_terms = wp_get_object_terms() 只会返回直接附加到帖子的类别,所以我只使用wp_list_categories() 获取并显示给定父类别(或已知父类别)的子类别。

这里的代码对我来说很有用,它显示了多达三个级别的子类别,包括那些没有帖子的子类别。此代码将替换从$page_id = get_queried_object_id();$terms = wp_list_categories(); 如问题所述,我正在使用get_ancestors() 而不是(你的)smart_category_top_parent_id():

$page_id = get_queried_object_id();

$category = get_the_category( $page_id );
$catid = ( ! empty( $category ) ) ? $category[0]->cat_ID : 0;

if ( $catid ) {
    // Get all parent IDs.
    $parents = get_ancestors( $catid, \'category\', \'taxonomy\' );

    $top_level_cat = ( count( $parents ) > 1 ) ?
        $parents[ count( $parents ) - 2 ] : // use the second parent category ID, or
        array_pop( $parents );              // otherwise, we\'ll use the first one

    $terms = wp_list_categories( array(
        \'title_li\'   => \'\',
        \'echo\'       => false,
        \'taxonomy\'   => \'category\',
        \'show_count\' => 1,
        \'child_of\'   => $top_level_cat,
        \'style\'      => \'list\',
        \'hide_empty\' => 0, // include empty categories
        \'depth\'      => 3, // and up to 3 levels depth
    ) );
}

相关推荐

批量操作在单击时重定向到“options.php”页面(WP_LIST_TABLE)

我对WP\\U List\\U表格有问题。我正在学习一个关于互联网的教程(https://wpengineer.com/2426/wp_list_table-a-step-by-step-guide/) 因为我需要在插件页面上显示一个表。问题是批量操作不起作用,我已经尝试使用我刚才提到的链接提供的原始代码,并且我也尝试遵循另一个教程。但是,当我按下批量操作按钮时,wordpress会将我重定向到wp admin/options。php页面,无论我按哪个动作块。我不知道为什么会这样。