Tax_query ID-uri termeni folosind variabilă
Vreau să creez un WP_Query personalizat folosind ID-urile termenilor din taxonomia customizată.
Exemplu de ID-uri pentru termeni: 19,18,214,226,20
De ce funcționează acest cod:
$query_args = array (
'post_type' => 'works',
'tax_query' => array(
array(
'taxonomy' => 'materials',
'field' => 'term_id',
'terms' => array( 19,18,214,226,20 ),
)
),
);
Afișează toate elementele din toți termenii taxonomiei cu ID-urile respective,
Dar acesta nu funcționează:
$tax = '19,18,214,226,20';
$query_args = array (
'post_type' => 'works',
'tax_query' => array(
array(
'taxonomy' => 'materials',
'field' => 'term_id',
'terms' => array( $tax ),
)
),
);
Folosind variabila $tax
, rezultatul interogării afișează doar elementele pentru primul ID de termen (19) și le ignoră pe celelalte.
De ce se întâmplă acest lucru și cum pot folosi variabila în tax_query în loc să scriu ID-urile direct în cod?
Se pare că creezi un array cu un singur șir de caractere în interior.
Verifică dacă transformarea variabilei $tax într-un array înainte de a o transmite va funcționa:
$tax = array( 19, 18, 214, 226, 20 );
$query_args = array (
'post_type' => 'works',
'tax_query' => array(
array(
'taxonomy' => 'materials',
'field' => 'term_id',
'terms' => $tax,
)
),
);
Dacă trebuie să creezi un array dintr-un șir de caractere formatat, poți folosi funcția PHP explode
care primește un delimitator și un șir de caractere, și returnează un array, astfel:
$tax_string = '19,18,214,226,20';
$tax_array = explode( ',', $tax_string );
Sper că funcționează!

Pentru că în PHP, $tax = '19,18,214,226,20';
este un șir de caractere. Și nu poți să înfășori un șir de caractere în array()
și să creezi un array :)
Poate ai nevoie de ceva de genul:
function comma_separated_to_array($string, $separator = ',')
{
//Explode pe virgulă
$vals = explode($separator, $string);
//Șterge spațiile albe
foreach($vals as $key => $val) {
$vals[$key] = trim($val);
}
//Returnează array gol dacă nu sunt găsite elemente
//http://php.net/manual/en/function.explode.php#114273
return array_diff($vals, array(""));
}
și să-l folosești astfel
$terms= comma_separated_to_array($tax);

Funcție excelentă pentru separarea valorilor separate prin virgulă într-un array, dar exagerată pentru întrebarea de mai sus.

Mulțumesc. 4 linii de cod cu mai puțin de 30 de caractere fiecare nu cred că sunt exagerate :)
