WordPress REST API V2: как получить список всех записей?

28 янв. 2021 г., 02:02:31
Просмотры: 15.5K
Голосов: 0

Мне нужно получить список всех записей в определенной категории. Количество записей превышает 100. Мне не нужен контент записей, только id и slug.

https://example.com/wp-json/wp/v2/posts/ возвращает только 10 записей с контентом.

Возможно ли получить все записи без контента?

4
Комментарии

Пагинация! Вам нужно запросить вторую страницу данных и так далее, это документировано в официальной документации с примерами на wordpress.org

Tom J Nowell Tom J Nowell
28 янв. 2021 г. 02:36:18

Да. Но в этом случае я также получаю содержимое записей. Мне не нужно так много данных, мне не нужно загружать весь контент записей. Мне нужны только id и slug. Также в данном случае мне нужно выполнить несколько запросов. Возможно ли получить меньше данных (только список, без контента) в одном запросе?

Andrey Epifantsev Andrey Epifantsev
28 янв. 2021 г. 05:12:16

Понятно, вам лучше задать 2 вопроса как два отдельных вопроса, а не объединять их, это увеличивает вероятность получения ответа, так как для публикации решения нужно знать ответы на оба вопроса. Также крайне высока вероятность, что вопрос о пагинации уже задавался и был отвечен на сайте. И правило - один вопрос на вопрос. Простые, понятные и сфокусированные вопросы получают больше голосов, видимости, просмотров и ответов.

Tom J Nowell Tom J Nowell
28 янв. 2021 г. 13:00:09
Все ответы на вопрос 2
0

По умолчанию, с использованием доступных хуков и API ядра, вы не можете получить более 100 элементов в ответе REST API WordPress из соображений производительности. Что касается второй части вопроса, вы можете удалить некоторые поля из ответа, используя параметр _fields в вашем запросе, как показано в примерах из руководства:

    // вариант a: используя имена полей через запятую.
    https://example.com/wp-json/wp/v2/posts/?_fields=author,id,excerpt,title,link

    // вариант b: используя синтаксис массива.
    https://example.com/wp-json//wp/v2/posts?_fields[]=author&_fields[]=id&_fields[]=excerpt&_fields[]=title&_fields[]=link

Теоретически, если вы владеете сайтом, вы можете удалить поля из ответа API, используя динамический фильтр rest_prepare_{$this->post_type} для типа(ов) записей, которые вы хотите изменить.

if(!function_exists('wpse_382314_post_filter_data')) :
    function wpse_382314_post_filter_data($response, $post) {
        $response->data['post_title'] = '';
        $response->data['post_content'] = '';
    }
}

add_filter('rest_prepare_post', 'wpse_382314_post_filter_data', 10, 3);
28 янв. 2021 г. 06:52:17
0

Прежде всего, чтобы получить более 10 записей, вам нужно просто указать параметр per_page.

https://example.com/wp-json/wp/v2/posts/?per_page=100

Но да, иногда записей может быть тысячи, и в этом случае, конечно, не лучшая идея — получать всё одним запросом к REST API. Мы можем объединить два запроса, используя параметры per_page и page:

https://example.com/wp-json/wp/v2/posts/?per_page=100&page=1
https://example.com/wp-json/wp/v2/posts/?per_page=100&page=2

Или вы также можете найти пример с использованием PHP и WordPress HTTP API здесь: https://rudrastyh.com/wordpress/rest-api-get-posts.html#parameters

27 мар. 2024 г. 06:02:55