多年来,我一直在我的一个网站上使用这段代码:
<?php
if (is_category()) {
$this_category = get_category($cat);
if (get_category_children($this_category->cat_ID) != "") {
echo "<ul class=\'subsubcats\'>";
wp_list_categories(\'orderby=title&show_count=0&title_li=
&use_desc_for_title=1&child_of=\'.$this_category->cat_ID);
echo "</ul>";
} else {
get_template_part(\'loop\'); // if no sub categories exist, show the posts
}
}
?>
这将在类别概述页面中显示所有子类别。如果没有子类别,它将显示包含的帖子。
我注意到,在WP Debug中,自WP 2.8以来,这段代码实际上已被弃用,因此现在是替换它的时候了。
我已经读到,我应该用get\\u术语来代替它。我找到了一段几乎可以满足我需要的代码:
<?php
$terms = get_terms([
\'taxonomy\' => get_queried_object()->taxonomy,
\'parent\' => get_queried_object_id(),
]);
echo \'<ul class="subsubcats"><li class="categories"><ul>\';
foreach ( $terms as $term) {
echo \'<li class="cat-item"><a href="\' . get_term_link( $term ) . \'">\' . $term->name . \'</a></li>\';
}
echo "</ul></li></ul>";
get_template_part(\'loop\'); // if no sub categories exist, show the posts
?>
但它有一个错误:它显示所有类别和子类别概述中的帖子,而旧代码仅在没有子类别可用时显示帖子。
我不知道如何调整此代码以使其按我需要的方式工作,非常感谢您的帮助!
最合适的回答,由SO网友:Sally CJ 整理而成
对get_category_children()
确实不推荐使用,您应该使用get_term_children()
相反因此,对于原始代码:
// You can simply replace this:
if (get_category_children($this_category->cat_ID) != "")
// with this:
$ids = get_term_children( $this_category->cat_ID, \'category\' );
if ( ! empty( $ids ) )
第二个代码使用
get_terms()
, 您可以检查术语列表是否为空,如果不是,则显示术语;否则,显示帖子:
$terms = get_terms( ... );
if ( ! empty( $terms ) ) {
// Display the terms.
echo \'<ul class="subsubcats"><li class="categories"><ul>\';
foreach ( $terms as $term ) {
... your code here ...
}
echo \'</ul></li></ul>\';
} else {
// Display the posts.
get_template_part( \'loop\' );
}
但是,对于你想做的事情,实际上可以通过
wp_list_categories()
:
$list = wp_list_categories( array(
\'orderby\' => \'title\',
\'title_li\' => \'\',
\'child_of\' => get_queried_object_id(), // just change the value if necessary
\'show_option_none\' => \'\', // this does the trick
\'echo\' => 0,
) );
if ( ! empty( $list ) ) {
echo \'<ul class="subsubcats">\' . $list . \'</ul>\';
} else {
get_template_part( \'loop\' );
}