在显示术语时正确排序自定义分类的层次结构

时间:2020-02-05 作者:James

在我的页面上,我显示了与帖子相关的自定义分类术语。例如,一个职位可能有以下继承权:

Filmmaking -> Production -> Cinematogrpahy
为此,我在我的content-child

<?php
    /*Retrieve Category Name */ 
        if(get_the_terms($post->ID, \'kernal_category\', true)) {
            // Create an empty array

            $kernal_category = get_the_terms($post->ID, \'kernal_category\', true);

            $categories = [];

            // Save each category to the array
            foreach ($kernal_category as $category) {

            $categories[] = $category->name;
            }

            // Now output with implode
                        echo implode(\' > \', $categories);
            }
    ?>
我的问题是,当显示这些术语时,它们没有遵循正确的层次结构。使用上面的示例,我的帖子实际显示如下:Cinematography -> Production -> Filmmaking.

我已经检查过了,并且该分类的主要设置正确,即电影摄影的主要设置是电影制作

如何按层次显示它们?

更新:它似乎会影响具有多个主要和次要术语的分类法。所有只显示主要和次要的帖子都正确显示。

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

如果要显示术语及其所有父项/祖先,可以执行以下操作:

function display_term_parents( \\WP_Term $starting_term ) {
    $terms = [];
    $term = $starting_term;
    while ( !is_wp_error( $term ) ) {
        $terms[] = $term->name;
        $term = get_term( $term->parent, \'kernal_category\' );
    }
    $terms = array_reverse( $terms );
    echo implode(\' > \', $terms );
}
哪里$starting_term 是要显示其祖先/父母的术语。

假设您只检查了所需的术语,但没有检查其所有父项,则可以为帖子的每个术语(或仅第一个术语)执行此操作

相关推荐