Лимит возврата 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), похоже, что оно не работает в самых последних версиях. Теперь кажется, что вы должны определить значение в конечной точке.

Ответ 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