如何利用WooCommerce钩子排除相关商品中的指定商品分类?
Got it,你要的是精准从WooCommerce相关商品里排除「Sold」分类的商品,而不是全局禁用这个分类的展示对吧?刚好可以用woocommerce_get_related_products钩子来实现,直接上代码和解释:
add_filter( 'woocommerce_get_related_products', 'exclude_sold_category_from_related_products', 10, 3 ); function exclude_sold_category_from_related_products( $related_posts, $product_id, $args ) { // 通过分类slug获取「Sold」分类的ID,slug是分类的短标识(后台分类编辑页URL里能看到) $sold_category = get_term_by( 'slug', 'sold', 'product_cat' ); // 先确认分类存在,避免报错 if ( ! $sold_category ) { return $related_posts; } $sold_category_id = $sold_category->term_id; // 过滤相关商品数组,移除属于「Sold」分类的商品 $related_posts = array_filter( $related_posts, function( $post_id ) use ( $sold_category_id ) { // 检查当前商品是否属于目标分类,返回不属于的商品ID return ! has_term( $sold_category_id, 'product_cat', $post_id ); }); // 返回过滤后的结果 return $related_posts; }
关键细节说明:
- 钩子参数:
woocommerce_get_related_products钩子提供了三个参数,我们用到了$related_posts(当前相关商品的ID数组)和$sold_category_id(目标分类ID)。 - 分类ID获取:用
get_term_by通过分类slug获取ID是最灵活的方式,如果你已经知道「Sold」分类的ID,直接替换成数字(比如$sold_category_id = 123;)会更高效。 - 过滤逻辑:
array_filter会遍历所有相关商品ID,has_term用来判断商品是否属于目标分类,加上!就会把属于该分类的商品排除掉。
注意事项:
- 把这段代码添加到你的主题
functions.php文件,或者使用自定义代码插件(比如Code Snippets)来添加,这样主题更新时不会丢失代码。 - 如果你的「Sold」分类slug不是
sold,记得把代码里的sold改成你实际的分类slug(后台分类编辑页面的URL里能找到这个slug)。 - 这个方法只会影响商品详情页的相关商品区块,不会影响其他地方的商品展示,完全符合你要的精准排除需求。
内容的提问来源于stack exchange,提问作者Richard Tinkler
相关产品推荐
相关产品推荐

