Ich habe eine neue Abfrage für einen benutzerdefinierten Beitragstyp "Kurse" erstellt. Diese Ergebnisse werden dann mit tax_query gefiltert, wobei 3 benutzerdefinierte Taxonomien abgefragt werden, die mit einer oder mehreren Term-IDs übereinstimmen. 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, bei der ich ein bisschen hängen bleibe, ist, wenn ein Array übergeben wird, das leer ist, dies würde offensichtlich die Abfrage unterbrechen und keine Ergebnisse zurückgeben.
Was wäre der sauberste Weg, dies in Angriff zu nehmen? Ich könnte etwas machen wie:
if (isset($search_course_area)) {
echo "array(
'taxonomy' => 'course-area',
'field' => 'id',
'terms' => $search_course_area
),";
};
Aber ich habe das Gefühl, dass dies nicht der beste Weg ist, sich dem anzunähern?
Vielen Dank für Ihre Zeit und jede Hilfe, die Sie geben können, ich weiß es wirklich zu schätzen!
Sie können die Argumente außerhalb der WP_Query
-Instanziierung 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,
)
);
?>
Nur für den Fall, dass dies heutzutage jemand sieht. Wenn Sie mehrere Fälle in Ihrer Abfrageinstanz haben, sollten Sie Ihre Variable von einem anderen Array umschließen lassen.
$meta_query = array();
if ( 0 == $current_user->ID ) {
$meta_query[] = array(array(
'key' => 'restrito_para_visualizar',
'value' => '1',
'compare' => '!=',
'type' => 'CHAR',
),
array(
'key' => 'ativo',
'value' => '1',
'compare' => '=',
'type' => 'NUMERIC',
));
} else {
$meta_query[] = array(
array(
'key' => 'ativo',
'value' => '1',
'compare' => '=',
'type' => 'NUMERIC',
));
}