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

wc_get_products无法返回全部商品,如何获取所有WooCommerce商品?

如何让wc_get_products返回WooCommerce全部商品?

我使用以下代码尝试获取所有WooCommerce商品:

$args = array(
    'limit' => -1,  // 尝试获取所有商品
    'return' => 'ids' // 仅获取ID以优化性能;移除该参数可获取完整商品对象
);

$product_ids = wc_get_products($args);
echo "<pre>";
print_r($product_ids);
echo "</pre>";

输出仅包含4个商品ID,但实际WooCommerce中有9个商品。单独用wc_get_product查询ID为620的商品可正常获取信息,对该商品执行快速编辑更新后,它会出现在查询结果中,但仍未返回全部商品。未发现这类商品与已返回商品有显著差异,请问如何让wc_get_products返回全部商品?


解决方法

1. 包含所有商品状态

wc_get_products默认只抓取**已发布(publish)**状态的商品,草稿、待审核、私密或回收站的商品不会被返回。添加status参数指定所有状态即可:

$args = array(
    'limit' => -1,
    'return' => 'ids',
    'status' => 'any' // 匹配所有商品状态
);

也可以指定具体状态数组,比如array('publish', 'draft', 'pending')。

2. 禁用查询缓存

编辑商品后能正常显示,说明大概率是WooCommerce的查询缓存导致旧数据未更新。在参数中添加cache字段强制禁用缓存:

$args = array(
    'limit' => -1,
    'return' => 'ids',
    'cache' => false
);

也可以在WooCommerce后台「状态 > 工具」中点击「清除临时数据」手动清理缓存。

3. 排查第三方过滤钩子

部分主题或插件会通过woocommerce_product_query_args或woocommerce_product_query钩子修改查询条件,导致商品被过滤。可以临时切换到默认主题(如Storefront)并禁用所有非WooCommerce插件,测试查询是否正常。如果恢复,再逐个排查插件和主题代码。

4. 显式指定所有产品类型

如果你的商品包含变体、分组等特殊类型,默认查询可能未覆盖。显式指定产品类型确保全部包含:

$args = array(
    'limit' => -1,
    'return' => 'ids',
    'type' => array('simple', 'variable', 'grouped', 'external', 'subscription')
);

5. 用WP_Query直接查询(备用方案)

如果以上方法都无效,可绕过wc_get_products,直接使用WP_Query获取所有产品ID:

$query = new WP_Query(array(
    'post_type' => 'product',
    'post_status' => 'any',
    'posts_per_page' => -1,
    'fields' => 'ids'
));

$product_ids = $query->posts;
echo "<pre>";
print_r($product_ids);
echo "</pre>";

内容的提问来源于stack exchange,提问作者Albert van Harten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 12:15:28