我有一个自定义帖子类型的'故事'。我有'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)
由于
答案 0 :(得分:1)
问题是因为你正在传递当前术语child_of
。要修复它,只需检索当前术语的根父级。
// 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
如果您不想循环,可以使用get_ancestors:
$parents = get_ancestors($term_id, $queried_object->taxonomy, 'taxonomy');
然后传递最后一个元素:
'child_of' => $parents ? end($parents) : $term_id