Operador "and" de tax_query en WordPress no funciona como se desea
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?

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',
),
),

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
