Cómo filtrar por categoría en REST API excluyendo posts que también están en otro término de categoría

2 sept 2016, 02:29:37
Vistas: 15.3K
Votos: 4

Estoy usando la REST API para cargar varios posts de otro sitio, cada post debe pertenecer a una categoría diferente. Sin embargo, tengo una categoría "Eventos destacados" que incluye posts que también aparecen en otras categorías, por lo que tengo un post repetido en dos categorías distintas.

Mi consulta para la categoría destacada es así:

http://localhost/wp-json/wp/v2/events/?categories=23&per_page=1

Y quiero excluir los posts de esa categoría (que ya se muestran como destacados), para que no aparezcan en las otras áreas. Ya he probado estas consultas:

http://localhost/wp-json/wp/v2/events/?categories=42&per_page=1&filter[category__not_in]=23

// pero leyendo category__not_in espera un array en lugar de un escalar:
// https://developer.wordpress.org/reference/classes/wp_query/#category-parameters
// He probado esto, pasando el id de la categoría excluida como primer elemento del array:

http://localhost/wp-json/wp/v2/events/?categories=42&per_page=1&filter[category__not_in][]=23

Ya he leído otras respuestas, no relacionadas con parámetros de REST API, sino con argumentos pasados directamente a WP_Query con el mismo problema: incluir posts en una categoría, pero excluir aquellos que pertenecen también a otro término. Ambas parecen funcionar consultando primero todos los posts que pertenecen a la categoría excluida, y luego pasando ese array de IDs al parámetro exclude, como consulta HTTP sería algo así:

http://localhost/wp-json/wp/v2/events/?categories=42&per_page=1&exclude[]=1&exclude[]=2&exclude[]=3

Sin embargo, esto es costoso, realizando dos consultas a la base de datos incluso en el mismo backend, pero esto es aún peor ya que serían dos viajes de ida y vuelta al backend desde la página HTML.

¿Hay una mejor manera de hacer esto? ¿WP_Query no soporta dos argumentos de categoría diferentes en la misma consulta? Cuando filtro por categorías y etiquetas, no hay conflicto.

1
Comentarios

¿Encontraste alguna solución que puedas compartir?

The Unknown Dev The Unknown Dev
19 oct 2016 16:27:19
Todas las respuestas a la pregunta 1
0

De acuerdo con http://v2.wp-api.org/reference/posts/ tienes disponible categories_exclude como parámetro para pasar a la API.

Esto debería funcionar: http://localhost/wp-json/wp/v2/events/?categories=23&categories_exclude=42&per_page=1

...para obtener las publicaciones de la categoría 23, pero excluyendo aquellas que también tengan asignada la categoría 42.

31 mar 2017 23:43:02