Relación múltiple para múltiples tax_query en WP_Query

9

Quiero usar la clase WP_Query() para filtrar algunas de mis publicaciones. El problema al que me enfrento ahora es manejar la consulta de taxonomía. Normalmente, el WP_Query() solo maneja una relación para el tax_query() (ya sea AND u OR), pero lo que necesito es un uso mixto de estas relaciones en el tax_query() , ¿cómo puedo lograrlo?
por ejemplo,

'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'taxonomy1',
            'field' => 'slug',
            'terms' => array( $term)
        ),
        array(
            'taxonomy' => 'taxonomy3',
            'field' => 'slug',
            'terms' => 'terms' => array( $term3),
            'operator' => 'IN',
        )
       // below i want to use OR relationship
       'relation' => 'OR',
      array(
            'taxonomy' => 'taxonomy4',
            'field' => 'slug',
            'terms' => array( $term4)
        ),
        array(
            'taxonomy' => 'taxonomy2',
            'field' => 'slug',
            'terms' => 'terms' => array( $term2),
            'operator' => 'IN',
        )
    )  

Sé que el código anterior no funciona, ¿necesito usar WP_Query() filter para hacerlo? ¿Alguna idea?

    
pregunta ron_dev 18.04.2013 - 18:44

2 respuestas

7

Esto se puede hacer usando term_taxonomy_id en lugar de la babosa, que ignorará efectivamente la taxonomía que se especifique y solo verá el campo único term_taxonomy_id. Esto le permitirá poder efectivamente hacer una relación mixta. Usted querría usar una relación general de AND y poner todos los términos que deberían estar relacionados O en un elemento utilizando el operador IN. Primero deberá asignar los términos deseados a sus term_taxonomy_ids.

$taxes = array( 'taxonomy1', 'taxonomy2', 'taxonomy3', 'taxonomy4' );

foreach ( $taxes as $tax ) {
    $terms = get_terms( $tax );

    foreach ( $terms as $term )
        $tax_map[$tax][$term->slug] = $term->term_taxonomy_id;
}


$args['tax_query'] => array(
    'relation' => 'AND',
    array(
        'taxonomy' => 'taxonomy1',
        'field' => 'term_taxonomy_id',
        'terms' => array( $tax_map['taxonomy1'][$slug] )
        'operator' => 'IN',
    ),
    array(
        'taxonomy' => 'taxonomy3',
        'field' => 'term_taxonomy_id',
        'terms' => array( $tax_map['taxonomy3'][$slug] ),
        'operator' => 'IN',
    ),
    array(
        'taxonomy' => 'taxonomy4', // gets ignored
        'field' => 'term_taxonomy_id',
        'terms' => array( $tax_map['taxonomy4'][$slug], $tax_map['taxonomy2'][$slug] ),
        'operator' => 'IN',
    ),
);

Ten en cuenta que antes de la versión 3.5, también deberías especificar 'include_children' => false . Consulte este ticket de Trac para obtener más información: enlace

    
respondido por el helenhousandi 19.04.2013 - 01:16
0

Sugiero usar tax_query como meta_query para múltiples y / y operadores como esto

    
respondido por el Maxime Culea 05.11.2015 - 12:00

Lea otras preguntas en las etiquetas