You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何挂钩WC_Widget_Product_Categories实现仅显示当前父类一级同级分类?

WooCommerce 产品分类小部件自定义实现方案

要实现仅在产品分类归档页面显示当前父分类的一级同级分类(无同级时显示当前层级分类)的需求,无需依赖Classic Widget,可通过WooCommerce提供的过滤器钩子修改WC_Widget_Product_Categories的查询逻辑,具体实现代码如下:

add_filter( 'woocommerce_product_categories_widget_args', 'custom_product_categories_widget_args' );
function custom_product_categories_widget_args( $args ) {
    // 仅在产品分类归档页面生效
    if ( ! is_product_category() ) {
        return $args;
    }

    $current_term = get_queried_object();
    $parent_id = $current_term->parent;

    // 处理有父分类的场景
    if ( $parent_id > 0 ) {
        // 查询父分类下的所有一级子分类(当前分类的同级)
        $sibling_terms = get_terms( array(
            'taxonomy'   => 'product_cat',
            'parent'     => $parent_id,
            'hide_empty' => $args['hide_empty'],
            'fields'     => 'ids',
        ) );

        if ( ! empty( $sibling_terms ) ) {
            // 仅显示同级分类
            $args['include'] = $sibling_terms;
            $args['hierarchical'] = false;
        } else {
            // 无同级时,显示当前分类所在层级(即当前分类本身)
            $args['include'] = array( $current_term->term_id );
        }
    } else {
        // 当前为顶级分类,显示所有顶级分类(同级)
        $args['parent'] = 0;
        $args['hierarchical'] = false;
    }

    return $args;
}

代码说明

  • 钩子woocommerce_product_categories_widget_args用于修改产品分类小部件的查询参数,确保只在产品分类归档页面触发逻辑。
  • 通过get_queried_object()获取当前页面的分类对象,进而得到父分类ID。
  • 针对有父分类的场景,查询父分类下的所有一级子分类作为同级分类;若没有同级分类,则仅显示当前分类。
  • 针对顶级分类,直接查询并显示所有顶级分类。
  • 继承小部件原有设置的hide_empty参数,保持是否隐藏空分类的一致性。

将上述代码添加到主题的functions.php文件或自定义插件中即可生效,可根据实际需求调整细节(如是否保留层级显示等)。

内容的提问来源于stack exchange,提问作者jijihbt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 23:47:11