API REST de WP: filtrar por categoría 1 Y categoría 2

6 ene 2017, 11:39:49
Vistas: 48.3K
Votos: 23

He estado trabajando con la API REST y estoy atascado con esto: ¿Cómo puedo filtrar posts que estén tanto en cat1 como en cat2?

Por ahora, ?categories[]=45&categories[]=50 devuelve posts en la categoría ID 45 O 50 - ¿cómo puedo obtener posts que estén en 45 Y 50?

Gracias de antemano.

2
Comentarios

¿Has encontrado una solución para esto?

Corey Corey
3 feb 2017 19:03:39

@Corey: No. Supongo que no es posible, por ahora (vi otras publicaciones de soporte de plugins que afirman eso). Estaba usando la API para una aplicación con Ionic, las cargué por separado e hice una intersección en su lugar. Lo dejo abierto, en caso de que mi aprendizaje esté incompleto. Leí en algún lugar donde se edita el Plugin (no se recomienda para nada) para lograrlo.

Jesse P Francis Jesse P Francis
5 feb 2017 17:17:40
Todas las respuestas a la pregunta 8
1
15

Múltiples categorías pueden ser separadas por comas como se muestra a continuación

http://example.com/wp-json/wp/v2/posts?categories=20,30

espero que esto ayude

11 may 2017 12:25:23
Comentarios

La solicitud es para la búsqueda AND, esto te dará OR.

Tom Woodward Tom Woodward
9 sept 2019 02:29:32
2

@Jesse mira: WP-API/WP-API#2990

Desde WP 4.7, filter ha sido eliminado de WP-API.

Necesitas usar este plugin: https://github.com/WP-API/rest-filter

28 dic 2017 21:05:27
Comentarios

Un plugin alternativo https://github.com/bueltge/wp-rest-api-filter-items que tiene pruebas para una inclusión sólida de mantenimiento.

bueltge bueltge
11 jun 2019 09:57:46

@bueltge, Interesante. Actualmente uso el plugin rest-api-filter-fields: https://github.com/svrooij/rest-api-filter-fields, que parece hacer prácticamente lo mismo.

Austin Passy Austin Passy
12 jun 2019 19:21:24
0

Parece que no hay una forma de hacer esto en la versión actual de la API. Sin usar un plugin, se puede lograr con un endpoint personalizado o utilizando la función de filtro de consulta REST para el tipo de publicación específico.

Aquí hay una función de filtro básica que añade un parámetro llamado cat_relation:

add_filter( 'rest_post_query', function( $args, $request ) {
    if($request['cat_relation'] == 'AND') {
        $args['category__and'] = $request['categories'];
    }
    return $args;
}, 10, 2);

Así que una URL de ejemplo sería:
http://example.com/wp-json/wp/v2/posts?categories=17,8&cat_relation=AND

29 abr 2020 18:15:36
0

Instala el plugin de filtro que mencionó Austin (https://github.com/WP-API/rest-filter) y prueba con ?filter[categories]=slug_categoria_uno%2Bslug_categoria_dos.

Descubrí que %2B es el equivalente en código del símbolo +.

Normalmente usaríamos + para el operador AND, pero desafortunadamente se convierte en un espacio, así que usa %2B en su lugar.

22 mar 2018 02:38:18
0

Filtrar publicaciones basadas en múltiples términos de taxonomías personalizadas usando condiciones lógicas "AND" (Y), "OR" (O).

Esto es lo que necesitas hacer en versiones más recientes de WordPress (v5 y superiores)

Digamos que tienes dos taxonomías personalizadas: sector y servicios.

Obtener todas las publicaciones etiquetadas con ID de taxonomía 51 "O" 52 pertenecientes al término de taxonomía "sector" "O" Obtener todas las publicaciones etiquetadas con ID de taxonomía 57 "Y" 58 pertenecientes al término de taxonomía "servicios"

https://mywordpressbackend.com/wp-json/wp/v2/posts?sector=51+52&servicios=57,58&tax_relation=OR

Obtener todas las publicaciones etiquetadas con ID de taxonomía 51 "O" 52 pertenecientes al término de taxonomía "sector" "Y" Obtener todas las publicaciones etiquetadas con ID de taxonomía 57 "Y" 58 pertenecientes al término de taxonomía "servicios"

https://mywordpressbackend.com/wp-json/wp/v2/posts?sector=51+52&servicios=57,58&tax_relation=AND
6 jul 2020 11:42:28
1
-2

Deberías poder acceder a múltiples categorías utilizando lo siguiente:

http://TU_SITIO.DEV/wp-json/wp/v2/posts?categories=45+50

¡Espero que esto ayude!

Saludos

14 ene 2017 15:00:21
Comentarios

¡Parece que no funciona! :)

Jesse P Francis Jesse P Francis
5 feb 2017 17:13:11
0
-2

Esto es lo que hice, funciona bien.

http://example.com/wp-json/wp/v2/articles/?_embed&categories=1,2,3,4&per_page=30
11 jun 2019 08:24:01
0
-2

Bien, mostrará el número de categorías para cada publicación cuando obtengas las publicaciones.

Luego puedes filtrar por el número de categoría así:

const wpdata = await fetch(`http://example.com/wp-json/wp/v2/posts`);
const jsonresp = await wpdata.json()
const particularcategoryposts = jsonresp.filter(function(item){
    return item.categories == "4";         
});

P.D.

Por defecto, la API de WP solo devuelve 10 publicaciones. Asegúrate de aclarar que necesitarás obtener más de 10 publicaciones si ese es el caso. El máximo son 100 publicaciones.

const wpdata = await fetch(`http://example.com/wp-json/wp/v2/posts/?per_page=100`);
26 may 2021 22:27:19