WooCommerce-在最后一个类别中获取(直接)父类别

WooCommerce-在最后一个类别中获取(直接)父类别,woocommerce,parent-child,Woocommerce,Parent Child,仅当我查看最后一个/最深的类别时,我希望显示为链接,父类别(而不是祖父类别)。更具表现力的是,当我浏览类别时,我有一些代码可以获取当前类别的子类别/子类别。代码是这样的 function sub_cats( $args = array() ) { $terms = get_terms([ 'taxonomy' => get_queried_object()->taxonomy, 'parent' => get_queried_obj

仅当我查看最后一个/最深的类别时,我希望显示为链接,父类别(而不是祖父类别)。更具表现力的是,当我浏览类别时,我有一些代码可以获取当前类别的子类别/子类别。代码是这样的

function sub_cats( $args = array() ) { 
    $terms = get_terms([
        'taxonomy' => get_queried_object()->taxonomy,
        'parent'   => get_queried_object_id(),
    ]);
    foreach ( $terms as $term) {
        echo '<li>';   
            echo '<a href="' . get_term_link( $term ) . '">' . $term->name . '</a>';  
        echo '<li>';   
    }
}
函数子函数($args=array()){
$terms=获取条款([
“分类法”=>get\u queryed\u object()->taxonomy,
'parent'=>get\u queryed\u object\u id(),
]);
foreach($terms作为$term){
回音“
  • ”; 回声'; 回音“
  • ”; } }
  • 由于我到达了每个类别树的最后一个/最深的类别/子类别,因此没有其他类别可显示。 现在,我被要求显示为链接,仅显示最后一个/最深类别的直接父类别(而不是祖父类别),并且仅显示当时的链接

    我发现,要检查当前类别中是否有儿童,如果有,请启动上述代码。如果没有,则获取父类别。但在这里,我将其全部放大,因为作为回报,我将得到数据库中所有属性和类别的结果

    //Get current category
    
    $term = get_queried_object();
    $children = get_terms( $term->taxonomy, array(
        'parent'    => $term->term_id,
        'hide_empty' => false
    ) );
    
    //If this category has children then get me the children
    if($children) {    
         $terms = get_terms([
            'taxonomy' => get_queried_object()->taxonomy,
            'parent'   => get_queried_object_id(),
        ]);
        foreach ( $terms as $term) {
            echo '<li>';   
            echo '<a href="' . get_term_link( $term ) . '">' . $term->name . '</a>';  
            echo '<li>';   
        }
    } else { //ELSE get me only the parent category -> HERE IS MY PROBLEM
        $caterms = get_terms( $product->ID, 'product_cat' );
    
        foreach ($caterms as $category) {
            if($category->parent == 0){
                echo '<li>';   
                echo '<a href="' . get_term_link( $category ) . '">' . $category->name . '</a>';  
                echo '<li>';  
    
            }
        } 
    }
    
    //获取当前类别
    $term=get_queryed_object();
    $children=get_terms($term->分类法,数组)(
    “父项”=>$term->term\u id,
    “hide_empty”=>false
    ) );
    //如果这个类别有孩子,那么给我孩子
    如果($儿童){
    $terms=获取条款([
    “分类法”=>get\u queryed\u object()->taxonomy,
    'parent'=>get\u queryed\u object\u id(),
    ]);
    foreach($terms作为$term){
    回音“
  • ”; 回声'; 回音“
  • ”; } }else{//else只获取父类别->这是我的问题 $caterms=get_terms($product->ID,'product_cat'); foreach($caterms作为$category){ 如果($category->parent==0){ 回音“
  • ”; 回声'; 回音“
  • ”; } } }

  • 请提供帮助

    您可以使用
    术语
    对象中的
    父项
    属性,并直接使用获取术语

    $term=get_queryed_object()//获取当前术语
    $children=get_terms($term->taxonomy,array(//get term children
    “父项”=>$term->term\u id,
    “hide_empty”=>false
    ) );
    如果($儿童){
    $terms=获取条款(
    排列(
    “分类法”=>$term->taxonomy,
    “父项”=>$term->term\u id,
    )
    );
    foreach($terms作为$term){
    回音“
  • ”; } }否则{ $parent\u id=$term->parent; $parent\u term=get\u term\u by('term\u id',$parent\u id);//获取直接父项 回音“
  • ”; }
    此函数用于获取所有产品类别的li标签,从第一级/顶级类别到最后一级/底层类别。然后,当浏览到底部/最深的类别时,会得到所有相同的-(最后一个/最深的)级别类别。因此,类别树不会在深入/最后一个类别时消失

    function sub_cats( $args = array() ) { 
        $term       = get_queried_object(); //get current term
        $children   = get_terms( $term->taxonomy, array( //get term children
                    'parent'        => $term->term_id,
                    'hide_empty'    => false
                    ) );
    
        if($children) {    
            $terms = get_terms(
                array(
                    'taxonomy' => $term->taxonomy,
                    'parent'   => $term->term_id,
                )
            );
            foreach ( $terms as $term) {
                echo '<li><a href="' . get_term_link( $term ) . '">' . $term->name . '</a></li>';
                                        }
        } else {
            $term_children = get_terms(
                            'product_cat',
                                    array(
                                        'parent' => $term->parent,
                                        )
                                        );
        if ( ! is_wp_error( $terms ) ) {
            foreach ( $term_children as $child ) {
            echo '<li><a href="' . get_term_link( $child ) . '">' . $child->name . '</a> 
        </li>';
                                                }
                                        }
            }
    }
    
    add_shortcode ('sub_cats', ' sub_cats' );
    
    函数子函数($args=array()){
    $term=get_queryed_object();//获取当前术语
    $children=get_terms($term->taxonomy,array(//get term children
    “父项”=>$term->term\u id,
    “hide_empty”=>false
    ) );
    如果($儿童){
    $terms=获取条款(
    排列(
    “分类法”=>$term->taxonomy,
    “父项”=>$term->term\u id,
    )
    );
    foreach($terms作为$term){
    回音“
  • ”; } }否则{ $term\u children=获取\u术语( “产品类别”, 排列( “父项”=>$term->parent, ) ); 如果(!is_wp_error($terms)){ foreach($term_children as$child){ 回声'
  • '; } } } } 添加_短代码(“sub_猫”、“sub_猫”);

    特别感谢Panos(VG)和@Frits

    感谢您的宝贵时间。我尝试了您的建议,但得到->可恢复致命错误:类WP_error的对象无法转换为字符串。。。函数->可恢复致命错误:类WP_error的对象无法转换为字符串。。。只有当我进入最后一个/最深的类别时,函数才会发生。不过,rest父类别树正在运行。@Papsofah我想我知道问题出在哪里了。我在echo语句中使用了错误的变量-请立即尝试?不幸的是,它不起作用。当我查看最后一个孩子时,我没有得到最后一个孩子的家长类别。非常感谢您的帮助。你真的帮了我很多。我做了一点小小的修改就成功了。老实说,我想我误解了我的想法,问了一个错误的问题,你解决了这个问题。实际问题是如何从直接父类别中获取当前所有同级子类别。我会发布我的功能,以防它对某人有帮助。再次感谢你
    function sub_cats( $args = array() ) { 
        $term       = get_queried_object(); //get current term
        $children   = get_terms( $term->taxonomy, array( //get term children
                    'parent'        => $term->term_id,
                    'hide_empty'    => false
                    ) );
    
        if($children) {    
            $terms = get_terms(
                array(
                    'taxonomy' => $term->taxonomy,
                    'parent'   => $term->term_id,
                )
            );
            foreach ( $terms as $term) {
                echo '<li><a href="' . get_term_link( $term ) . '">' . $term->name . '</a></li>';
                                        }
        } else {
            $term_children = get_terms(
                            'product_cat',
                                    array(
                                        'parent' => $term->parent,
                                        )
                                        );
        if ( ! is_wp_error( $terms ) ) {
            foreach ( $term_children as $child ) {
            echo '<li><a href="' . get_term_link( $child ) . '">' . $child->name . '</a> 
        </li>';
                                                }
                                        }
            }
    }
    
    add_shortcode ('sub_cats', ' sub_cats' );