获取分层术语的第一个父项

时间:2015-03-02 作者:Lollipop

如何获取avô 此层次分类:

avô
-mae
--filho
它总是给我最后一个孩子:

<?php 

    $product_cats = wp_get_post_terms( get_the_ID(), \'product_cat\' );

    $single_cat = array_shift( $product_cats ); 

    echo $single_cat->slug;

?>
结果:filho

必须获取类别avô

UPDATE:

$product_cats 退货:

Array
(
    [0] => stdClass Object
        (
            [term_id] => 16
            [name] => Display
            [slug] => filho
            [term_group] => 0
            [term_taxonomy_id] => 16
            [taxonomy] => product_cat
            [description] => 
            [parent] => 7
            [count] => 2
            [filter] => raw
        )

)

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

因为你在一篇文章中,你需要先获得类别,然后使用get_ancestors() 显示层次结构。

$product_cats   = wp_get_post_terms( get_the_ID(), \'product_cat\' );

if( ! empty( $product_cats ) ) {

    $single_cat     = array_shift( $product_cats );

    $product_ancs   = get_ancestors( $single_cat->term_id, \'product_cat\' );

    if( ! empty( $product_ancs ) ) {

        $top_level_cat  = array_shift( array_reverse( $product_ancs ) );

        $single_cat     = get_term( $top_level_cat, \'product_cat\' );
    }

    echo $single_cat->slug;
}
如果未检查类别或所附术语没有父项,则上面的示例将运行一些错误检查。首先,我们获得所有的Post术语,并仅使用1作为基础来获取其所有祖先。如果它有父母或祖父母,它将在我们的$product_ancs 大堆让我们看看example given in The Codex:

书籍(6)小说(23)神秘(208)<?php get_ancestors( 208, \'category\' ); ?> 返回以下数组:

Array
(
    [0] => 23
    [1] => 6
)
顶层位于阵列的末端,这是我们利用的方式array_reverse().

第二种方法是使用循环,逐个遍历每个术语,直到到达顶部。每个父母都不应该有一个父母($top_term->parent 将为0->false->empty),因此我们可以在循环中查找:

 $product_cats = wp_get_post_terms( get_the_ID(), \'product_cat\' );

 $single_cat = array_shift( $product_cats );

 if( ! empty( $product_cats ) ) {

        $single_cat = array_shift( $product_cats );

        $top_term = $single_cat;

        if( $top_term->parent > 0 ) {

            while( $top_term->parent > 0 ) {

                $top_term = get_term( $top_term->parent, \'product_cat\' );

            }

        } else {

           $attr = \'no_parent\';

        }

        $attr = $top_term->slug;

    } else {

        $attr = \'empty_categories\';

    }
一旦while 循环返回false(到达0的父级),我们知道我们已经到达了层次结构的顶部。

结束

相关推荐

Show all sub categories?

是否可以显示所有父猫的所有子/子类别?我有以下层次结构:父类别/税--子1--子2父类别/税2--子1--子2我想能够在一个模板上显示所有子类别,而不显示父类别。这可能吗?