使用WooCommerce REST API获取全部商品仅返回10条结果的问题
解决WooCommerce REST API v2仅返回10条商品的问题
这个问题我之前也碰到过,WooCommerce REST API v2默认每页只返回10条数据,而且你用的filter[posts_per_page]=-1参数其实在v2版本里并不受支持(或者说被API的默认限制给覆盖了),下面给你几个靠谱的解决办法:
1. 使用官方推荐的per_page参数调整单页返回数量
WooCommerce API有自己的分页参数per_page,默认最大可以设置到100(这是API的安全上限,避免一次性拉取过多数据拖垮服务器)。你可以把请求地址改成:
https://squatwolf.com/wp-json/wc/v2/products?per_page=100
这样单页就能返回最多100条商品了。
2. 分页遍历获取全部商品
如果你的商品总数超过100,那必须通过分页来逐步获取所有数据,步骤如下:
- 先发起第一次请求,带上
per_page=100,然后查看响应头里的两个关键字段:X-WP-Total:返回你的店铺总商品数X-WP-TotalPages:返回总共有多少页数据
- 接着循环请求每一页,比如第二页的地址是:
直到请求的https://squatwolf.com/wp-json/wc/v2/products?per_page=100&page=2page数值等于X-WP-TotalPages的数值,这样就能把所有商品都拉取下来了。
为什么filter[posts_per_page]=-1不生效?
WooCommerce REST API v2并没有兼容WordPress原生的filter[posts_per_page]参数的-1取值,一方面是API本身做了限制,另一方面是为了性能考虑——一次性拉取全部商品可能会导致服务器超时或者响应过慢,官方更推荐用分页的方式来获取大量数据。
如果你的商品数量不多,且一定要尝试修改单页最大返回数,也可以通过WordPress代码添加过滤器调整上限,但不建议这么做:
add_filter( 'woocommerce_rest_per_page', 'custom_wc_rest_per_page', 10, 2 ); function custom_wc_rest_per_page( $per_page, $request ) { // 设置你想要的最大数量,比如200 return 200; }
不过还是优先用分页方案更稳妥。
内容的提问来源于stack exchange,提问作者user379888
相关产品推荐
相关产品推荐

