web-dev-qa-db-ja.com

Wp api 2.0で最初の10個だけでなく全てのタグを取得

/wp-json/wp/v2/tagsを実行した場合、最初の10個しか取得できず、実際にすべてのタグを取得するためにper_page=0を追加しても動作しなくなります。

誰でも実際に wp-api 2.0 で全てのタグを取得する方法を知っていますか?

2
Ezeewei

WP_REST_Controller::get_collection_params()メソッドを見ると、minimum1であり、maximum100です。

'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に対するこのデフォルトの制限によって、サーバーを "高負荷"から "保護"することができます。

4
birgire