¿Usar $ query-set varias veces con pre_get_posts?

4

Estoy usando pre_get_posts hook para filtrar publicaciones por términos personalizados. Todo funciona bien, pero si quiero filtrar publicaciones por 2 términos personalizados, la consulta solo filtra por el último término dado. Ver mi código a continuación. Engancho esto en pre_get_posts pero cuando ambas afirmaciones son VERDADERAS, solo se realiza el último $ consulta- > conjunto, lo que significa que no filtrará las publicaciones dos veces. ¿Hay alguna forma de lograr esto? Gracias

//For searching
if( $query->is_main_query() && isset( $_GET[ 'ls' ] ) ) {
$rt_term_id = $_GET['listing_soort'];
$rt_term_id_land = $_GET['listing_land'];
        // IF our soort vakantie is set and not empty - include it in the query
        if( isset( $rt_term_id ) && ! empty( $rt_term_id ) ) {
            $query->set( 'tax_query', array( array(
                'taxonomy'  => 'vakantiesoorten_listing',
                'field'     => 'id',
                'terms'     => array($rt_term_id[0]),
            ) ) );
        }
        // IF our land vakantie is set and not empty - include it in the query
        if( empty($_GET['location_geo_data']) && isset( $rt_term_id_land ) && ! empty( $rt_term_id_land ) ) {
            $query->set( 'tax_query', array( array(
                'taxonomy'  => 'landen_listing',
                'field'     => 'id',
                'terms'     => array($rt_term_id_land[0]),
            ) ) );
        }
    }   
    
pregunta RobbTe 20.07.2017 - 15:44

2 respuestas

3

Piensa en este pseudo código

if sky == blue
  set a = 5
if grass == green
  set a = 7

¿Qué valor tendrá a ? No 12.

Esta es exactamente la misma situación. Está configurando un parámetro específico para un valor específico. En la segunda llamada, está sobrescribiendo su valor anterior. Para evitar esto, puede generar el valor (aquí la matriz) de antemano y llamar a ->set() solo una vez.

$tax_query = array();
if( isset( $rt_term_id ) && ! empty( $rt_term_id ) ) {
    $tax_query[] = array(
        'taxonomy'  => 'vakantiesoorten_listing',
        'field'     => 'id',
        'terms'     => array($rt_term_id[0]),
    );
}
if( empty($_GET['location_geo_data']) && isset( $rt_term_id_land ) && ! empty( $rt_term_id_land ) ) {
    $tax_query[] = array(
        'taxonomy'  => 'landen_listing',
        'field'     => 'id',
        'terms'     => array($rt_term_id_land[0]),
    );
}
$query->set( 'tax_query', $tax_query );
    
respondido por el kero 20.07.2017 - 15:50
1

Puede hacer esto, solo necesita obtener el valor original de la consulta de impuestos, agregar la consulta adicional y luego volver a establecerla. La versión abreviada es:

// Get current tax query if it exists, otherwise get an empty array.
$tax_query = $query->get( 'tax_query' ) ?: array();

if ( true ) {
    $tax_query[] = array(); // Add first tax query.
}

if ( true ) {
    $tax_query[] = array(); // Add second tax query.
}

$query->set( 'tax_query', $tax_query ); // Set tax query parameter on query.
    
respondido por el Jacob Peattie 20.07.2017 - 15:49

Lea otras preguntas en las etiquetas