Лимит возврата Wordpress API JSON
Это простой вопрос о Wordpress API/wp-json. Я запрашиваю некоторые данные, отфильтрованные определенной категорией в Wordpress. Мои вопросы: как я могу контролировать количество результата, которое возвращается из моего запроса Get... По умолчанию возвращается, по-видимому, около 11 последних результатов. Есть ли способ заставить его вернуть только 1 (последнее) или 100 сообщений. Какова минимальная и максимальная сумма, которую я могу вернуть. И для чего это синтаксис. Это запрос по умолчанию, который у меня есть:
http://thisismywebsitewherewordpresslives.com/wp-json/posts?fiter[category_name]=Some Category Name I want to query&filter[order]=ASC
Ответы
Ответ 1
Если вы используете v2 API-интерфейса WordPress REST, похоже, что текущий метод управления количеством возвращаемых результатов:
website.com/wp-json/wp/v2/posts/?per_page=100
Замените 100 желаемым количеством.
Если вы используете настраиваемый тип сообщения, замените сообщения специальным типом сообщения. Также не забудьте установить 'show_in_rest' => true
при настройке настраиваемого типа сообщений.
Ответ 2
Добавьте параметр filter [posts_per_page] в запрос, чтобы ограничить количество результатов, возвращаемых API.
http://thisismywebsitewherewordpresslives.com/wp-json/posts?filter[posts_per_page]=2&fiter[category_name]=Some Category Name I want to query&filter[order]=ASC
Вышеприведенный запрос должен возвращать только 2 результата. Список параметров запроса присутствует здесь https://github.com/WP-API/WP-API/blob/master/docs/routes/routes.md#retrieve-posts
Ответ 3
Как сказал другой: (v2)
http://example.com/wp-json/wp/v2/posts?per_page=10
Но если вы хотите получить больше следующих сообщений: (paged)
http://example.com/wp-json/wp/v2/posts?per_page=10&page=2
Документы: http://v2.wp-api.org/reference/posts/ (прокрутите до Список сообщений)
Ответ 4
В настоящее время API налагает 99-процентный возврат. Таким образом, max website.com/wp-json/wp/v2/posts/?&per_page=99
, который сказал, что кажется, что вы можете изменить, чтобы добавить дополнительные сообщения. Здесь обсуждается следующее: https://github.com/WP-API/WP-API/issues/2914
Ответ 5
Моя рекомендация выше больше не верна. Теперь вы захотите использовать:
website.com/wp-json/wp/v2/posts/?filter[posts_per_page]=100
Измените номер, чтобы получить больше или меньше сообщений. При необходимости измените "сообщения" на свой настраиваемый тип сообщения и не забудьте установить 'show_in_rest' => true
при регистрации настраиваемого типа сообщений.
Примечание.. При установке значения posts_per_page -1 в более ранних бета-версиях плагина (2.0-beta13.1), похоже, что оно не работает в самых последних версиях. Теперь кажется, что вы должны определить значение в конечной точке.
Ответ 6
Аргу в V2 является "per_page" - http://v2.wp-api.org/reference/posts/
Ответ 7
Я удивлен, что никто не упоминал об использовании собственных фильтров, созданных WordPress для подобных ситуаций.
Мне удалось добиться возврата желаемого количества постов по умолчанию, при этом позволяя параметру $_GET['per_page']
работать так:
/**
* Default to all posts being returned rather than the default 10 posts per
* page. Also, do not get in the way of the native $_GET['per_page'] setting.
* @param {int} $newDefault The new default amount of posts to return per paginated page
* @var {void}
*/
function setRestApiPostsPerPage($newDefault) {
foreach (get_post_types() as $i => $postType) {
add_filter( "rest_{$postType}_query", function ($args, $request) {
if (! isset($_GET['per_page'])) {
// new default to overwrite the default 10
$args['posts_per_page'] = $newDefault;
}
return $args;
}, 15, 2);
}
}
Я обнаружил, что вы не можете установить $args['posts_per_page'] = -1;
Это приводит к ошибке, которую вы можете увидеть здесь.
Вы можете добавить любую логику в замыкание/обратный вызов/фильтр, чтобы установить $args['posts_per_page']
так, как вам бы хотелось.
Ответ 8
Вы можете изменить:
add_action( 'rest_YOUR_CPT_params', function($params){
if ( isset( $params ) AND isset( $params[ 'per_page' ] ) ) {
$params[ 'per_page' ][ 'maximum' ] = 500;
}
return $params;
});
И в URL для получения добавить ?per_page=500
Пример: https://domain.pl/wp-json/wp/v2/books?per_page=500