web-dev-qa-db-ger.com

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 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!

4
Craig Pearson

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,
    )
);
?>
11
jessica

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',
    )); 
} 
0
Wesley Andrade