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

如何利用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:10:39