Wordpress REST API V2: ¿cómo obtener una lista de todas las publicaciones?

28 ene 2021, 02:02:31
Vistas: 15.5K
Votos: 0

Necesito obtener una lista de todas las publicaciones en una categoría específica. El número de publicaciones es superior a 100. No necesito el contenido de la publicación. Solo necesito el ID y el slug.

https://example.com/wp-json/wp/v2/posts/ devuelve solo 10 publicaciones con contenido.

¿Es posible obtener todas las publicaciones sin contenido?

4
Comentarios

¡Paginación! Necesitas solicitar la segunda página de datos, etc., está documentado en la documentación oficial con ejemplos en wordpress.org

Tom J Nowell Tom J Nowell
28 ene 2021 02:36:18

Sí. Pero en este caso, también obtengo el contenido de las publicaciones. No necesito tantos datos, no necesito descargar todo el contenido de las publicaciones. Solo necesito el ID y el slug. Además, en este caso, necesito generar varias consultas. ¿Es posible obtener menos datos (solo lista, sin contenido) en una sola consulta?

Andrey Epifantsev Andrey Epifantsev
28 ene 2021 05:12:16

Entiendo, sería mejor que hicieras 2 preguntas como 2 preguntas separadas en lugar de agruparlas, esto reduce la probabilidad de obtener una respuesta ya que para publicar una solución necesitarías saber la respuesta a ambas preguntas. También hay una probabilidad extremadamente alta de que la pregunta sobre paginación ya haya sido formulada y respondida en el sitio. Y la política de 1 pregunta por pregunta. Las preguntas fáciles de entender, enfocadas y claras obtienen más votos positivos, visibilidad, vistas y respuestas.

Tom J Nowell Tom J Nowell
28 ene 2021 13:00:09
Todas las respuestas a la pregunta 2
0

De forma predeterminada y utilizando los hooks y API disponibles en el núcleo, no puedes tener más de 100 elementos por respuesta en la API REST de WordPress por razones de rendimiento. Para la segunda parte de la pregunta, puedes eliminar algunos campos de la respuesta usando el parámetro _fields en tu solicitud como puedes ver en los ejemplos del manual:

    // opción a: usando nombres de campos separados por comas.
    https://example.com/wp-json/wp/v2/posts/?_fields=author,id,excerpt,title,link

    // opción b: usando sintaxis de array.
    https://example.com/wp-json//wp/v2/posts?_fields[]=author&_fields[]=id&_fields[]=excerpt&_fields[]=title&_fields[]=link

Y teóricamente, si eres el dueño del sitio web, podrías eliminar campos de la respuesta de la API usando el filtro dinámico rest_prepare_{$this->post_type} para el/los tipo(s) de post(s) que deseas modificar.

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 ene 2021 06:52:17
0

En primer lugar, para obtener más de 10 publicaciones, todo lo que necesitas hacer es proporcionar el parámetro per_page.

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

Pero sí, a veces pueden haber miles de publicaciones, en ese caso por supuesto no es una buena idea obtener todo en una sola solicitud de la API REST. Y podemos combinar dos solicitudes usando ambos parámetros per_page y 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

o también puedes encontrar el ejemplo con PHP y la API HTTP de WordPress aquí: https://rudrastyh.com/wordpress/rest-api-get-posts.html#parameters

27 mar 2024 06:02:55