Verwenden Sie $ query-> mehrfach mit pre_get_posts?

Ich verwende pre_get_posts Hook , um Beiträge nach benutzerdefinierten Begriffen zu filtern. Alles funktioniert gut, aber wenn ich Beiträge nach 2 benutzerdefinierten Begriffen filtern möchte, filtert die Abfrage nur nach dem letzten Begriff. Siehe meinen Code unten. Ich hake dies in pre_get_posts ein, aber wenn beide if-statementen TRUE sind, wird nur die letzte $ query-> gesetzt, was bedeutet, dass die Beiträge nicht zweimal gefiltert werden. Gibt es einen Weg, dies zu erreichen? Vielen Dank

//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]), ) ) ); } } 

Solutions Collecting From Web of "Verwenden Sie $ query-> mehrfach mit pre_get_posts?"

Denken Sie an diesen Pseudocode

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

Welchen Wert wird a haben? Nicht 12.

Dies ist die exakt gleiche Situation. Sie setzen einen bestimmten Parameter auf einen bestimmten Wert. Im zweiten Anruf überschreiben Sie Ihren vorherigen Wert. Um dies zu vermeiden, können Sie vorher den Wert (hier das Array) erstellen und ->set() nur einmal aufrufen.

 $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 ); 

Sie können dies tun, müssen Sie nur den ursprünglichen Wert der Steuerabfrage erhalten, fügen Sie die zusätzliche Abfrage hinzu, und legen Sie sie erneut fest. Die abgekürzte Version ist:

 // 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.