基于自定义分类法替换WooCommerce相关商品无结果问题
解决WooCommerce相关商品改为同商家(自定义分类法)展示的问题
看起来你之前的代码没写完或者参数设置有问题,我给你整理了一套完整的可行方案,直接替换你之前的代码就行:
完整实现代码
add_filter( 'woocommerce_related_products_args', 'custom_related_products_by_vendor', 20 ); function custom_related_products_by_vendor( $args ) { global $product; // 先做基础校验:确保当前是有效产品页面,且自定义分类法存在 if ( ! is_a( $product, 'WC_Product' ) || ! taxonomy_exists( 'vendor_name' ) ) { return $args; } // 获取当前产品关联的vendor_name分类ID $vendor_terms = wp_get_post_terms( $product->get_id(), 'vendor_name', array( 'fields' => 'ids' ) ); // 如果当前产品没分配商家分类,直接返回默认逻辑,避免出错 if ( empty( $vendor_terms ) ) { return $args; } // 核心修改:让相关商品查询只包含同商家分类的产品 $args['tax_query'] = array( array( 'taxonomy' => 'vendor_name', 'field' => 'term_id', 'terms' => $vendor_terms, 'operator' => 'IN', ) ); // 排除当前产品本身,避免自己出现在相关商品里 $args['post__not_in'] = array( $product->get_id() ); // 可选:调整显示的相关商品数量,默认是4,你可以改成你需要的数字 $args['posts_per_page'] = 4; return $args; }
为什么之前的代码可能没生效?
我猜你之前的代码可能有这些问题:
- 代码不完整(比如
foreach没写完),导致逻辑中断 - 用了
$post->ID而不是WooCommerce推荐的$product->get_id(),在变体产品这类场景下会出错 - 没有设置正确的
tax_query参数,这是WordPress查询分类内容的核心条件 - 缺少基础校验,比如分类不存在时的处理,容易引发报错
使用说明
- 把这段代码复制到你当前主题的
functions.php文件末尾,或者用专门的代码管理插件(比如Code Snippets)来添加,避免主题更新丢失代码 - 确认你的自定义分类法
vendor_name确实存在,并且已经给产品分配了对应的商家分类 - 刷新产品页面,就能看到相关商品只展示同商家的产品了
内容的提问来源于stack exchange,提问作者JeVic
相关产品推荐
相关产品推荐

