我有类别和子类别。
类别页面使用以下代码显示其下的子类别:
add_shortcode( 'list_subcats', function() {
ob_start();
$current_cat = get_queried_object();
$term_id = $current_cat->term_id;
$taxonomy_name = 'category';
$term_children = get_term_children( $term_id, $taxonomy_name );
echo '<ul class="list-subcats">';
foreach ( $term_children as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name );
echo '<li><a href="' . get_term_link( $child, $taxonomy_name ) . '">' . $term->name . '</a></li>';
}
echo '</ul>';
return ob_get_clean();
} );
子类别按时间顺序列出。
我想按名称顺序显示子类别列表,而不是按时间顺序。
是否可以使用此代码按名称而不是按时间顺序显示子类别列表?
你能对 $term_children 进行排序吗? 或输出到数组以首先排序?
这应该会给你想要的结果。
要显示按名称排序而不是按时间顺序排序的子类别列表,可以修改代码如下:
替换此行:
$term_children = get_term_children( $term_id, $taxonomy_name );
与:
$term_children = get_terms( array(
'taxonomy' => $taxonomy_name,
'parent' => $term_id,
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false,
) );
这使用
get_terms()
函数根据 $term_id
和 $taxonomy_name
检索子类别。 orderby
参数设置为 'name'
可以按名称对子类别进行排序,order
参数设置为 'ASC'
可以进行升序排列。
更新
foreach
循环以直接使用 $child
对象,而不是再次获取术语:
foreach ( $term_children as $child ) {
echo '<li><a href="' . get_term_link( $child->term_id, $taxonomy_name ) . '">' . $child->name . '</a></li>';
}
由于
$term_children
现在包含术语对象,您可以直接访问每个 term_id
对象的 name
和 $child
属性。
这是更新后的代码:
add_shortcode( 'list_subcats', function() {
ob_start();
$current_cat = get_queried_object();
$term_id = $current_cat->term_id;
$taxonomy_name = 'category';
$term_children = get_terms( array(
'taxonomy' => $taxonomy_name,
'parent' => $term_id,
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false,
) );
echo '<ul class="list-subcats">';
foreach ( $term_children as $child ) {
echo '<li><a href="' . get_term_link( $child->term_id, $taxonomy_name ) . '">' . $child->name . '</a></li>';
}
echo '</ul>';
return ob_get_clean();
} );
进行这些更改后,子类别将按名称的字母顺序显示。