/wp-json/wp/v2/tags
を実行した場合、最初の10個しか取得できず、実際にすべてのタグを取得するためにper_page=0
を追加しても動作しなくなります。
誰でも実際に wp-api 2.0 で全てのタグを取得する方法を知っていますか?
WP_REST_Controller::get_collection_params()
メソッドを見ると、minimumは1
であり、maximumは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))
これがissueに関連していることがわかります #1609 where @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
に対するこのデフォルトの制限によって、サーバーを "高負荷"から "保護"することができます。