如何按名称顺序而不是按时间顺序显示子类别列表?

问题描述 投票:0回答:2

我有类别和子类别。

类别页面使用以下代码显示其下的子类别:

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();
} );

子类别按时间顺序列出。

我想按名称顺序显示子类别列表,而不是按时间顺序。

是否可以使用此代码按名称而不是按时间顺序显示子类别列表?

php wordpress categories shortcode
2个回答
0
投票

你能对 $term_children 进行排序吗? 或输出到数组以首先排序?

这应该会给你想要的结果。


0
投票

要显示按名称排序而不是按时间顺序排序的子类别列表,可以修改代码如下:

  1. 替换此行:

    $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'
    可以进行升序排列。

  2. 更新

    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();
} );

进行这些更改后,子类别将按名称的字母顺序显示。

© www.soinside.com 2019 - 2024. All rights reserved.