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

wc_get_products分类查询异常及排除特定分类的写法咨询

WooCommerce产品查询问题解答

一、tax_query返回结果不符的原因

你使用category参数传入数组['wordpress', 'plugin']时,WooCommerce默认会将其解析为OR关系——只要产品属于wordpress或plugin其中一个分类,就会被返回,因此能拿到全部预期产品。

而你用tax_query时,在单个子数组里设置operator => 'AND'是错误用法:对于同一个分类法(product_cat)的多条件AND关系,不能在一个子数组里通过operator => 'AND'实现。这个写法的实际逻辑是“产品必须同时匹配这两个terms的同一个分类条目”,而非“产品同时属于这两个分类”,这种场景极少有产品满足,所以仅返回1个结果。

二、排除分类的查询语句修正

你提供的原查询写法不正确,以下是修正后的正确代码:

1. 同时属于两个分类的正确查询

$args = array(
    'post_type'      => 'product',
    'post_status'    => 'publish',
    'posts_per_page' => -1, 
    'tax_query'      => array(
        'relation' => 'AND',
        // 必须属于wordpress分类
        array(
            'taxonomy' => 'product_cat',
            'field'    => 'slug',
            'terms'    => array( 'wordpress' ),
            'operator' => 'IN',
        ),
        // 必须同时属于plugin分类
        array(
            'taxonomy' => 'product_cat',
            'field'    => 'slug',
            'terms'    => array( 'plugin' ),
            'operator' => 'IN',
        ),
    ),  
);
$products = wc_get_products( $args );

2. 同时属于两个分类且排除addon分类的正确查询

$args = array(
    'post_type'      => 'product',
    'post_status'    => 'publish',
    'posts_per_page' => -1, 
    'tax_query'      => array(
        'relation' => 'AND',
        // 必须属于wordpress分类
        array(
            'taxonomy' => 'product_cat',
            'field'    => 'slug',
            'terms'    => array( 'wordpress' ),
            'operator' => 'IN',
        ),
        // 必须同时属于plugin分类
        array(
            'taxonomy' => 'product_cat',
            'field'    => 'slug',
            'terms'    => array( 'plugin' ),
            'operator' => 'IN',
        ),
        // 排除属于addon分类的产品
        array(
            'taxonomy' => 'product_cat',
            'field'    => 'slug',
            'terms'    => array( 'addon' ),
            'operator' => 'NOT IN',
        ),
    ),  
);
$products = wc_get_products( $args );

说明:要实现同一个分类法下的多条件AND,需将每个分类拆成独立的tax_query子数组,再通过外层的relation => 'AND'关联。单个子数组里的operator,对于单个term用IN即可,多个term时IN代表OR关系,AND在此场景下不适用(一个分类条目不可能同时对应两个slug)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 05:07:27