Utilisez $ query-set plusieurs fois avec pre_get_posts?

4

J'utilise le crochet pre_get_posts afin de filtrer les publications en fonction de termes personnalisés. Tout fonctionne bien, mais si je veux filtrer les messages par 2 termes personnalisés, la requête ne filtre que par le dernier terme donné. Voir mon code ci-dessous. Je rattache ceci à pre_get_posts mais lorsque les deux instructions sont vraies, seul le dernier ensemble $ query- > est terminé, ce qui signifie qu'il ne filtrera pas les publications deux fois. Est-il possible d'accomplir cela? Merci

//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]),
            ) ) );
        }
    }   
    
posée RobbTe 20.07.2017 - 15:44

2 réponses

3

Pensez à ce pseudo-code

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

Quelle valeur aura a ? Non 12.

C'est exactement la même situation. Vous définissez un paramètre spécifique sur une valeur spécifique. Lors du deuxième appel, vous écrasez votre valeur précédente. Pour éviter cela, vous pouvez créer la valeur (ici le tableau) auparavant et appeler ->set() une seule fois.

$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 );
    
réponse donnée kero 20.07.2017 - 15:50
1

Vous pouvez le faire, il vous suffit d'obtenir la valeur d'origine de la requête fiscale, d'ajouter la requête supplémentaire, puis de la redéfinir. La version abrégée est la suivante:

// 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.
    
réponse donnée Jacob Peattie 20.07.2017 - 15:49

Lire d'autres questions sur les étiquettes