使用JWT Authentication for WP-API调用Woocommerce REST API仅返回12条结果怎么办
解决步骤
1. 核对生成JWT的账号权限
你用于生成JWT Token的WordPress账号必须匹配Woocommerce的商品读取权限:
- 此前OAuth 1.0认证时你大概率使用了管理员/店铺管理员的密钥,切换JWT时如果使用了订阅者等低权限账号,默认只能拉取已发布的公开商品,私有商品、草稿商品都会被过滤,最终返回的总数量就会远低于实际商品数
- 进入WP后台用户管理页,将对应账号的角色调整为店铺管理员或管理员,重新生成JWT Token后再发起请求测试
2. 排查JWT插件的限制规则
JWT Authentication for WP-API插件部分版本会默认对REST请求做资源限制:
- 进入WP后台
设置 > JWT Authentication页面,检查是否开启了REST API资源数量限制类开关,如有直接关闭 - 检查站点根目录的
.htaccess文件,确认JWT插件自动添加的规则没有额外限制参数,正常的规则仅需包含以下内容,多余的和per_page/limit相关的规则直接删除:
RewriteEngine on RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
3. 强制放开Woocommerce接口返回限制
如果上述操作无效,可以在当前使用主题的functions.php文件中添加以下代码,覆盖所有插件对商品接口的过滤规则,放开返回数量限制:
// 调整商品接口per_page参数上限 add_filter( 'woocommerce_rest_product_collection_params', function( $params ) { if ( isset( $params['per_page'] ) ) { $params['per_page']['maximum'] = 500; // 可根据你的实际商品总量调整最大值 } return $params; }, 999 ); // 重置商品查询逻辑,避免其他插件过滤结果 add_filter( 'rest_post_dispatch', function( $result, $server, $request ) { if ( $request->get_route() === '/wc/v3/products' ) { $req_params = $request->get_params(); $query_args = [ 'post_type' => 'product', 'posts_per_page' => isset( $req_params['per_page'] ) ? intval( $req_params['per_page'] ) : 100, 'post_status' => ['publish', 'draft', 'private'] // 可根据你需要拉取的商品状态调整 ]; remove_all_filters( 'pre_get_posts' ); $product_query = new WP_Query( $query_args ); $result->header( 'X-WP-Total', $product_query->found_posts ); } return $result; }, 999, 3 );
4. 验证请求有效性
你可以用Postman等工具携带相同的Bearer Token直接请求/wp-json/wc/v3/products?per_page=100,如果Postman返回的X-WP-Total数值正常,说明是React Native侧请求库自动截断了参数或者参数编码错误,自行检查前端请求逻辑即可。
内容的提问来源于stack exchange,提问作者Eric Lehmann
相关产品推荐
相关产品推荐

