La API REST de WP ya no admite el parámetro filter, entonces ¿cómo obtengo posts en una taxonomía personalizada?

3 dic 2016, 11:59:49
Vistas: 24.4K
Votos: 8

Por todo Internet veo consejos de personas que dicen que cuando quieres obtener posts en una taxonomía personalizada deberías usar el parámetro filter, por ejemplo:

https://example.com/wp-json/wp/v2/posts?filter[genre]=fiction

Este parece ser un parámetro muy útil. Pero en la v2 de la API REST de WP simplemente no funciona. Cuando creé un ticket en WP Trac para averiguar qué estaba pasando, @swissspidy respondió que "el parámetro filter se eliminó a propósito" pero que la documentación aún no se ha actualizado. El cambio se discute en el ticket 38378 de Trac.

De acuerdo, está bien, pero ¿podría alguien decirme cómo debo recuperar posts en una taxonomía personalizada ahora? Estoy escribiendo un plugin que depende de poder hacer esto.

Por ejemplo, si he creado una taxonomía personalizada no jerárquica instance y le he dado el valor 1 para ciertos posts en un tipo de post personalizado, ¿cómo puedo recuperar todos los posts de ese tipo y con instance=1?

Si no es posible a través de la API REST, ¿hay alguna manera de hacerlo a través de la API de WordPress.com en un sitio autohospedado con Jetpack habilitado?

5
Comentarios

Prueba este plugin https://github.com/bueltge/wp-rest-api-filter-items

bueltge bueltge
7 dic 2016 11:41:27

Gracias @bueltge, pero parece que ese plugin es para filtrar qué campos devuelve la API para cada publicación?

And Finally And Finally
7 dic 2016 14:19:33

Actualmente ayuda a filtrar publicaciones, comentarios, taxonomías. Si necesitas más, sería necesaria una mejora en https://github.com/bueltge/wp-rest-api-filter-items/tree/master/inc/Items.

bueltge bueltge
7 dic 2016 15:12:28

También en este contexto https://github.com/WP-API/rest-filter

bueltge bueltge
7 dic 2016 20:14:08

¡Ah, gracias! ¡Ese es el tipo de filtro del que estaba hablando! Si quieres publicar eso como una respuesta, la aceptaré. Presumiblemente hubo buenas razones para eliminar el argumento del filtro, por lo que puede que no sea lo mejor en todos los casos restaurarlo, pero es un complemento extremadamente útil que me señala cómo lograr lo que quiero hacer.

And Finally And Finally
8 dic 2016 13:41:54
Todas las respuestas a la pregunta 2
4

Desde WordPress 4.7, el argumento filter para cualquier endpoint de publicaciones fue eliminado. Pero si los necesitas, puedes agregarlos mediante un plugin. El Repositorio de la API de WP tiene un plugin 'Rest Filter' para este trabajo, pequeño y sencillo.

8 dic 2016 13:48:23
Comentarios

¡Gracias! Esto funcionó para mí. No estaba seguro si había desventajas al restaurar todo el argumento del filtro, así que en lugar de instalar el plugin, seguí su ejemplo para crear un filtro de consulta API REST para mi tipo de publicación personalizado que agrega $args['tax_query'] a los args. Esto me permite filtrar mis publicaciones personalizadas según etiquetas de taxonomía personalizada en la API. Pero para las personas que quieran restaurar el argumento del filtro, el plugin hará el trabajo.

And Finally And Finally
8 dic 2016 14:29:57

@AndFinally ¿te importaría compartir cómo lograste tu filtro de taxonomía en los tipos de publicaciones personalizadas? ¡Sería de gran ayuda!

bmiskie bmiskie
10 abr 2017 20:33:36

@bmiskie Simplemente instala el plugin y el parámetro del filtro debería funcionar como antes

Sisir Sisir
24 jul 2017 12:09:20

Revisé el problema en GitHub sobre el parámetro de filtro (https://github.com/WP-API/WP-API/issues/2799) y apunta a un canal de Slack al que no pertenezco, por lo que no puedo ver las razones detrás de la decisión. ¿Alguien puede explicar por qué se eliminó?

jagershark jagershark
2 oct 2018 19:14:11
0

La documentación de la API REST de WordPress tiene una sección sobre cómo registrar posts y taxonomías personalizadas con la API. Básicamente, añades 'show_in_rest' => true cuando registras el tipo de post personalizado o la taxonomía personalizada.

register_taxonomy('instance', ['post'], [
    <other args...>,
    'show_in_rest' => true,
]);

Una vez hecho esto, puedes filtrar cualquier objeto para el que hayas registrado esa taxonomía ('post' en el ejemplo anterior) por esa taxonomía personalizada usando su nombre como parámetro en la cadena de consulta, por ejemplo:

https://example.com/wp-json/wp/v2/posts?instance=1

Ten en cuenta que el valor del parámetro de taxonomía ('1' en el ejemplo anterior) debe ser el id del objeto de taxonomía, no su nombre o slug. Si solo conoces el slug y no el id, puedes buscar primero el id consultándolo por separado, ya que registrar tu taxonomía personalizada con la API también crea su propio endpoint personalizado:

https://example.com/wp-json/wp/v2/instance?slug=foo-bar
28 abr 2020 02:24:14