如果我们看看WP_REST_Controller::get_collection_params()
方法,我们可以看到最小值1
最大值为100
:
\'per_page\' => array(
\'description\' => __( \'Maximum number of items to be returned in result set.\' ),
\'type\' => \'integer\',
\'default\' => 10,
\'minimum\' => 1,
\'maximum\' => 100,
\'sanitize_callback\' => \'absint\',
\'validate_callback\' => \'rest_validate_request_arg\',
),
如果我们检查
CHANGELOG.md
我们找到的文件:
- Enforces minimum 1 and maximum 100 values for `per_page` parameter.
(props @danielbachhuber,
[#2209](https://github.com/WP-API/WP-API/pull/2209))
我们看到这与问题有关
#1609 其中@rmccue
comment 是:
您应该能够筛选rest_endpoints
并更改其中的最大值。这可能会更容易,但理想情况下,您不应该改变这一点。
这个rest_endpoints
过滤器应用于WP_REST_Server::get_routes()
方法:
/**
* Filters the array of available endpoints.
*
* @since 4.4.0
*
* @param array $endpoints The available endpoints. An array of matching regex patterns,
* each mapped to an array of callbacks for the endpoint.
* These take the format
* `\'/path/regex\' => array( $callback, $bitmask )` or
* `\'/path/regex\' => array( array( $callback, $bitmask ).
*/
$endpoints = apply_filters( \'rest_endpoints\', $this->endpoints );
例如,我们可以尝试:
/**
* Change the maximum of per_page for /wp/v2/tags/ from 100 to 120
*/
add_filter( \'rest_endpoints\', function( $endpoints )
{
if( isset( $endpoints[\'/wp/v2/tags\'][0][\'args\'][\'per_page\'][\'maximum\'] ) )
$endpoints[\'/wp/v2/tags\'][0][\'args\'][\'per_page\'][\'maximum\'] = 120;
return $endpoints;
} );
另一种方法是通过
rest_post_tag_query
过滤器:
/**
* Fix the per_page to 120 for the post tags query of get_terms()
*/
add_filter( \'rest_post_tag_query\', function( $args, $request )
{
$args[\'number\'] = 120;
return $args;
}, 10, 2 );
您可能需要根据自己的需要进一步调整此选项。
请注意,此默认限制per_page
如果您的安装有大量条款,则可以“保护”您的服务器免受高负载的影响。