Operador "and" de tax_query en WordPress no funciona como se desea

24 ago 2016, 05:20:48
Vistas: 25.2K
Votos: 9

Tengo un tipo de entrada personalizada de image con una taxonomía personalizada llamada image_tag (es jerárquica como las categorías). Aquí hay algunos ejemplos de las etiquetas que podrían usarse:

Estructura (id: 25)
- Casa (id: 56)
- Rascacielos
Naturaleza
- Animal
- Planta (id: 41)

Entonces, quiero filtrar las imágenes seleccionando múltiples etiquetas en conjunto con el operador "and". Por ejemplo, encontrar todas las fotos con plantas y casas.

$query_args = array(
  'post_type' => 'image',
  'tax_query' => array(
    array(
      'taxonomy' => 'image_tag',
      'terms' => array(41, 56),    // IDs de "planta" y "casa"
      'operator' => 'and',
    ),
  ),
);

Eso funciona bien, el problema comienza cuando intento incluir los términos padre, por ejemplo:

$query_args = array(
  'post_type' => 'image',
  'tax_query' => array(
    array(
      'taxonomy' => 'image_tag',
      'terms' => array(25, 41),    // IDs de "estructura" y "planta"
      'operator' => 'and',
    ),
  ),
);

Entonces no obtengo resultados. Supongo que debido a que estoy usando el operador "and", WordPress no incluye los hijos del término "Estructura". ¿Alguien tiene una idea de cómo puedo hacer que esto funcione, o alguna otra solución para lograr esto?

0
Todas las respuestas a la pregunta 2
1
15

no probado pero prueba esto

'tax_query' => array(
   'relation' => 'AND',
    array(
      'taxonomy' => 'image_tag',
      'field'    => 'term_id',
      'terms'    => 25,
      'operator' => 'IN',
    ),
    array(
      'taxonomy' => 'image_tag',
      'field'    => 'term_id', 
      'terms'    => 41,
      'operator' => 'IN',
    )
  ),

O

'tax_query' => array(
   'relation' => 'AND',
    array(
      'taxonomy' => 'image_tag',
      'field'    => 'term_id',
      'terms'    => array(25,41),
      'operator' => 'IN',
    ),
  ),
24 ago 2016 06:09:02
Comentarios

¡Gracias por tu tiempo! Para cualquier otra persona que pueda encontrar esto, la primera solución es la correcta.

dkeeling dkeeling
26 ago 2016 22:01:22
0

No puedo comentar todavía, pero en la respuesta aceptada, una ligera modificación de la segunda solución es 'operator' => 'AND', y se puede prescindir de la variable relation. Parece que la variable operator especifica la relación de los términos dentro de su array, mientras que la variable relation especifica la relación para grupos de términos. Fuente

18 jul 2023 09:28:04