Wordpress:仅显示二级分类术语

时间:2018-02-13 02:20:38

标签: php wordpress custom-post-type categories taxonomy

我有一个自定义帖子类型的'故事'。我有'story_categories'的分类。我需要显示顶级类别,并在这些类别下面显示子类别。使用以下代码可以正常工作......

<?php
    $queried_object = get_queried_object();
    $term_id = $queried_object->term_id;
    $list_child_terms_args = array(
        'taxonomy' => 'story_categories',
        'title_li' => '',
        'child_of' => $term_id
    );
?>
<ul class="list list-links list-links-small">
    <?php wp_list_categories( $list_child_terms_args ); ?>
</ul>

......直到我点击其中一个子类别。然后我得到'没有类别'(我认为这是因为它总是在寻找当前页面的子类别,而子类别没有这些类别。)

有没有办法以一种方式使用上面的代码,即使我在一个子类别中它始终显示某个级别的子类别?例如:

Stories (top level)
--News (2nd level) < Always display subcats of this at all times
--Events (2nd level) < Always display subcats of this at all times
---Stuff (3rd level)
---Stuff (3rd level)

由于

1 个答案:

答案 0 :(得分:1)

问题是因为你正在传递当前术语child_of。要修复它,只需检索当前术语的根父级。

选项1

// Loop until you reach the top parent term
$root = $queried_object;
while($root->parent != '0')
    $root = get_term_by('id', $root->parent, $root->taxonomy);

然后,一旦你检索到root,就像这样更新你的args:

'child_of' => $root->term_id

选项2

如果您不想循环,可以使用get_ancestors

$parents = get_ancestors($term_id, $queried_object->taxonomy, 'taxonomy');

然后传递最后一个元素:

'child_of' => $parents ? end($parents) : $term_id