WordPress REST API无法获取10篇以上Products内容求解决方案
我之前也碰到过类似的WP REST API自定义文章类型分页限制问题,结合你的尝试,给你几个关键的排查和修复方向:
1. 先修正请求参数的格式错误
你之前尝试的请求链接里有一个明显的低级错误:出现了两个问号?,比如:
https://cnperformance.wpengine.com/wp-json/wp/v2/products?_embed&?filter[per_page]=-1
URL里只能有一个?作为参数起始符,后续所有参数都要用&连接,正确的格式应该是:
https://cnperformance.wpengine.com/wp-json/wp/v2/products?_embed&filter[per_page]=100
或者直接使用WP REST API原生的per_page参数(不需要依赖filter插件):
https://cnperformance.wpengine.com/wp-json/wp/v2/products?_embed&per_page=100
2. 调整REST API的per_page最大限制(更可靠的写法)
你之前的代码是移除maximum限制,但有时候WordPress核心会保留兜底限制,建议直接设置一个明确的最大值,比如允许最多100条:
add_filter( 'rest_endpoints', function( $endpoints ){ if ( isset( $endpoints['/wp/v2/products'] ) ) { // 把最大请求数量设置为你需要的数值,比如100 $endpoints['/wp/v2/products'][0]['args']['per_page']['maximum'] = 100; } return $endpoints; });
注意:不要用-1,WP REST API并不支持用-1获取所有内容,核心会把它当作无效值,自动 fallback 到默认的10条。
3. 确认Products自定义文章类型的REST配置
有些主题或插件注册products自定义文章类型时,可能没有正确开启REST支持,导致参数不生效。检查你的products注册代码,确保包含以下配置:
register_post_type( 'products', array( // 其他必填参数(标签、支持功能等)... 'show_in_rest' => true, 'rest_base' => 'products', 'rest_controller_class' => 'WP_REST_Posts_Controller', ) );
如果是用电商插件(比如WooCommerce)创建的products,确保插件的REST API功能是开启的,并且没有被其他设置限制。
4. 排查插件冲突
除了「WP REST API filter parameter」,暂时禁用其他插件(比如缓存插件、安全插件)测试:有些安全插件会限制REST API的请求数量防止恶意爬取;缓存插件也可能缓存了旧的请求结果,导致新参数不生效。
5. 直接使用原生参数替代filter插件
其实WP REST API v2本身就支持per_page参数,不需要依赖「WP REST API filter parameter」插件,只要你已经通过代码调整了per_page的最大限制,直接用&per_page=100就能生效。
内容的提问来源于stack exchange,提问作者kurtg




