php WooCommerce -显示带有子分类链接的父分类

p4rjhz4m  于 2023-01-19  发布在  PHP
关注(0)|答案(1)|浏览(122)

我正在使用WooCommerce和自定义分类模板。我试图输出客户正在查看的当前分类法的父类别,作为"后退"按钮或"跳上一个类别"链接。
输出需要创建一个短代码,以便可以将其放置在自定义模板构建器中。或者我被添加到XYZ片段,这将为函数创建一个短代码。
我尝试了一个片段,但没有在前端输出。

    • 请帮帮我**

类别树示例(父项突出显示):

* Furniture
    

* Furniture Chairs (Would show "Furniture")

* Armchair (Would show "Chairs")

* Wooden Armchairs (Would show "Armchair")
function product_category_parent_shortcode() {
$cat = get_queried_object();

$cats = get_terms( [
    'taxonomy' => $cat->taxonomy,
    'child_of' => $cat->parent,
] );

if ( ! empty( $cats ) ) {
    echo '<ul>';
    foreach ( $cats as $cat ) {
        $url = esc_url( get_category_link( $cat ) );
        // change the 'before' and/or 'after' or whatever necessary
        echo "<li>before <a href='$url'>$cat->name</a> after</li>";
    }
    echo '</ul>';
}
}
add_shortcode('product_category_parent', 'product_category_parent_shortcode');

我也试过下面的代码片段,但结果不一致。它输出的类别链接有时有效,有时无效,这让我认为代码搜索的地方不对。代码的设计是为了搜索单个产品术语,而不是所需的类别。

// Get parent product categories on single product pages
$terms = wp_get_post_terms( get_the_id(), 'product_cat', array( 'include_children' => false ) );

// Get the first main product category (not a child one)
$term = reset($terms);
$term_link =  get_term_link( $term->term_id, 'product_cat' ); // The link
echo '<h2 class="link"><a href="'.$term_link.'">Return</a></h2>';
jk9hmnmh

jk9hmnmh1#

如果只是想显示breadcrumb样式的tax父列表,可以使用get_term_parents_list

add_shortcode('cat-list-breadcrumb', function() {
    if ( !is_tax() && !is_category() && !is_tag() )
        return 'Dont call me here peasant!';

    $obj = get_queried_object();
    $options = [
        'separator' => ' / ',
        'inclusive' => false
    ];
    return get_term_parents_list( $obj->term_id, $obj->taxonomy , $options ). ' '. $obj->name;
});

如果你需要建立你自己的html格式,那么使用get_ancestors

add_shortcode('cat-list', function() {
    
    if ( !is_tax() && !is_category() && !is_tag() )
        return;
        
    $obj = get_queried_object();
    
    $output = '<ul>';
    
    $parents = get_ancestors( $obj->term_id,  $obj->taxonomy );
   
    foreach ( array_reverse( $parents ) as $termId ) {
        $parent = get_term( $termId, $obj->taxonomy );
        $out .= '<li><a href="' . esc_url( get_term_link( $parent->term_id, $obj->taxonomy ) ) . '">' . $parent->name . '</a></li>';

    } 

    $out .= '<li>'.$obj->name . '</li>';
    return $out.'</ul>';
});

如果您只想显示第一级父级,而不想显示第二级到顶级,则只需在get_queried_objectparent值上使用get_term

add_shortcode('cat-parent', function() {
    
    if ( !is_tax() && !is_category() && !is_tag() )
        return;
        
    $obj = get_queried_object();
    
    if ( !$obj->parent )
        return;
        
    $parent = get_term( $obj->parent, $obj->taxonomy );
    
    return '<a href="' . esc_url( get_term_link( $parent->term_id, $obj->taxonomy ) ) . '">' . $parent->name . '</a>';

});

相关问题