Argumente condiționale pentru WP_Query și tax_query în funcție de valoarea variabilei $somevar
Am creat o nouă interogare pentru un tip de postare personalizat 'courses'. Aceste rezultate urmează să fie filtrate folosind tax_query, interogând 3 taxonomii personalizate care se potrivesc cu unul sau mai multe ID-uri de termeni. Acestea sunt transmise de pe o pagină de căutare.
Iată codul care funcționează până acum:
// Să emulăm ID-urile transmise din widget-ul de căutare cursuri
// cu câteva ID-uri statice de termeni pentru fiecare taxonomie personalizată.
$search_course_area = array(65, 62);
$search_course_level = array(117); //52 pentru filtrare suplimentară
$search_course_mode = array(54, 56);
//Începem o nouă interogare
$query = new WP_Query(
array(
//Preluăm TOATE postările de tip curs
'post_type' => 'course',
'posts_per_page' => '-1',
//Filtrăm taxonomiile după id-urile transmise din widget-ul de căutare cursuri
'tax_query' => array(
//Setăm condiția de relație pentru filtre
//în acest caz folosim AND deoarece este setat explicit
//de către utilizator în timpul căutării
'relation' => 'AND',
//Prima verificare preia course-area pe bază de ID
array(
'taxonomy' => 'course-area',
'field' => 'id',
'terms' => $search_course_area
),
//Și din nou pentru a doua taxonomie
array(
'taxonomy' => 'study-levels',
'field' => 'id',
'terms' => $search_course_level
),
//În final verificăm și preluăm course-mode pe bază de ID
array(
'taxonomy' => 'course-mode',
'field' => 'id',
'terms' => $search_course_mode
),
)
)
);
Problema la care m-am blocat este că dacă se transmite un array gol, acest lucru ar strica evident interogarea și nu ar returna niciun rezultat.
Care ar fi cea mai elegantă modalitate de a aborda această situație?
Puteți defini argumentele în afara instanțierii WP_Query
:
<?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(
// Preluăm TOATE postările de tip 'course'
'post_type' => 'course',
'posts_per_page' => '-1',
// Filtrăm taxonomiile după ID-urile trimise de widget-ul course finder
'tax_query' => $tax_query,
)
);
?>

Doar în cazul în care cineva vede asta în zilele noastre, dacă aveți mai multe cazuri în cadrul instanței dumneavoastră de interogare, ar trebui să aveți variabila înfășurată într-un alt array... ceva de genul:
$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',
));
}
