Получить все теги не только первые 10 с помощью wp api 2.0

если я делаю /wp-json/wp/v2/tags я могу получить только первые 10, и кажется, что добавление per_page=0 больше не работает на нем для получения фактически всех тегов.

Кто-нибудь знает, как на самом деле получить все теги с помощью wp-api 2.0 ?

Solutions Collecting From Web of "Получить все теги не только первые 10 с помощью wp api 2.0"

Если мы посмотрим на метод 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:

Вы должны иметь возможность фильтровать 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 может «защитить» ваш сервер от высокой загрузки, если ваша установка имеет большое количество терминов.