咨询:如何让WooCommerce单品页仅显示子分类相关产品
解决WooCommerce单品页仅显示子分类相关产品的问题
嘿,这个问题我之前帮不少店铺主和开发者解决过——WooCommerce默认的相关产品逻辑确实会把父分类的产品也拉进来,尤其是当你的产品挂在多个大父分类下时,很容易出现“随机凑数”的情况。下面给你两个针对新版本WooCommerce的可行方案,放心用:
方案一:通过自定义代码实现(推荐,灵活可控)
你可以将以下代码添加到子主题的functions.php文件中,或者用代码片段插件插入(避免主题更新丢失代码):
add_filter( 'woocommerce_related_products_args', 'custom_related_products_args' ); function custom_related_products_args( $args ) { global $product; // 获取当前产品的所有分类 $categories = get_the_terms( $product->get_id(), 'product_cat' ); if ( empty( $categories ) ) { return $args; // 若无分类,沿用默认逻辑 } // 筛选出所有子分类(parent不为0的分类) $child_category_ids = array(); foreach ( $categories as $category ) { if ( $category->parent !== 0 ) { $child_category_ids[] = $category->term_id; } } // 若有子分类,修改查询参数 if ( ! empty( $child_category_ids ) ) { $args['tax_query'] = array( array( 'taxonomy' => 'product_cat', 'field' => 'id', 'terms' => $child_category_ids, 'operator' => 'IN', ), ); } // 排除当前产品本身 $args['post__not_in'] = array( $product->get_id() ); return $args; }
代码说明:
- 先获取当前产品的所有分类,筛选出其中的子分类(即
parent字段不为0的分类) - 修改相关产品的查询条件,只展示属于这些子分类的产品
- 如果产品没有子分类,会自动 fallback到WooCommerce默认逻辑,不会出错
- 确保当前产品不会出现在相关产品列表里
方案二:使用可视化插件(适合不想写代码的用户)
如果你不想折腾代码,可以找专门控制WooCommerce相关产品的插件,比如WooCommerce Related Products for Specific Categories这类工具:
- 安装激活后,你可以在产品编辑页或插件设置里,直接设置“仅显示当前产品子分类下的相关产品”
- 这类插件一般都支持最新版WooCommerce,操作界面直观,不需要懂代码就能搞定
注意事项
- 用代码方案时,一定要用子主题或者代码片段插件(比如Code Snippets)添加代码,别直接修改主题的
functions.php,否则主题更新后代码会丢失 - 测试前记得清空WooCommerce缓存,确保修改生效
内容的提问来源于stack exchange,提问作者DigitalSM
相关产品推荐
相关产品推荐

