Bedingte Argumente für WP_Query und tax_query, abhängig davon, ob $ somevar einen Wert hat

Ich habe eine neue Abfrage für einen benutzerdefinierten Post-Typ von ‘Kurse’ erstellt. Diese Ergebnisse werden dann mit tax_query gefiltert, wobei 3 benutzerdefinierte Taxonomien abgefragt werden, die 1 oder mehrere Begriff-IDs entsprechen. Diese werden von einer Suchseite übergeben.

Hier ist der Code, der bis jetzt funktioniert:

// Lets emulate the posted ID's from the course search widget // with some static term ID's for each custom taxonomy. $search_course_area = array(65, 62); $search_course_level = array(117); //52 for further filtering $search_course_mode = array(54, 56); //Begin a new query $query = new WP_Query( array( //Retreive ALL course posts 'post_type' => 'course', 'posts_per_page' => '-1', //Filter taxonomies by id's passed from course finder widget 'tax_query' => array( //Set the relation condition for the filters in //this case we're using AND as it is explicity set //by the user when searching 'relation' => 'AND', //First check retreive course-area's based on ID array( 'taxonomy' => 'course-area', 'field' => 'id', 'terms' => $search_course_area ), //And again for the second taxonomy array( 'taxonomy' => 'study-levels', 'field' => 'id', 'terms' => $search_course_level ), //Finally check retreive course-level's based on ID array( 'taxonomy' => 'course-mode', 'field' => 'id', 'terms' => $search_course_mode ), ) ) ); 

Die Sache, auf die ich ein wenig feststecke, ist, wenn ein Array übergeben wird, das leer ist, würde dies offensichtlich die Abfrage unterbrechen und keine Ergebnisse liefern.

Was wäre der sauberste Weg, dies anzugehen? Ich könnte etwas tun wie:

 if (isset($search_course_area)) { echo "array( 'taxonomy' => 'course-area', 'field' => 'id', 'terms' => $search_course_area ),"; }; 

Aber ich habe das Gefühl, das wäre nicht der beste Weg, um es anzugehen?

Vielen Dank für Ihre Zeit und jede Hilfe, die Sie geben können, ich schätze es wirklich!

Craig

Solutions Collecting From Web of "Bedingte Argumente für WP_Query und tax_query, abhängig davon, ob $ somevar einen Wert hat"

Sie können die WP_Query außerhalb der WP_Query Instantiierung definieren:

 < ?php $tax_query = array('relation' => 'AND'); if (isset($search_course_area)) { $tax_query[] = array( 'taxonomy' => 'course-area', 'field' => 'id', 'terms' => $search_course_area ); } if (isset($search_course_level)) { $tax_query[] = array( 'taxonomy' => 'study-levels', 'field' => 'id', 'terms' => $search_course_level ); } if (isset($search_course_mode)) { $tax_query[] = array( 'taxonomy' => 'course-mode', 'field' => 'id', 'terms' => $search_course_mode ); } $query = new WP_Query( array( //Retreive ALL course posts 'post_type' => 'course', 'posts_per_page' => '-1', //Filter taxonomies by id's passed from course finder widget 'tax_query' => $tax_query, ) ); ?>