Query tax_query con ID dei termini usando variabili
Voglio creare una WP_Query personalizzata usando gli ID dei termini di una tassonomia custom.
Esempio degli ID dei termini: 19,18,214,226,20
Perché questo funziona:
$query_args = array (
'post_type' => 'works',
'tax_query' => array(
array(
'taxonomy' => 'materials',
'field' => 'term_id',
'terms' => array( 19,18,214,226,20 ),
)
),
);
Mostra tutti gli elementi da tutti gli ID dei termini della tassonomia,
Ma questo non funziona:
$tax = '19,18,214,226,20';
$query_args = array (
'post_type' => 'works',
'tax_query' => array(
array(
'taxonomy' => 'materials',
'field' => 'term_id',
'terms' => array( $tax ),
)
),
);
Usando la variabile $tax
il risultato della query mostra solo gli elementi del primo ID del termine (19), e ignora tutti gli altri.
Perché succede questo e come posso usare la variabile nella tax_query invece di codificare direttamente gli ID?
Sembra che tu stia creando un array con una singola stringa all'interno.
Verifica se convertire $tax in un array prima di passarlo funziona:
$tax = array( 19, 18, 214, 226, 20 );
$query_args = array (
'post_type' => 'works',
'tax_query' => array(
array(
'taxonomy' => 'materials',
'field' => 'term_id',
'terms' => $tax,
)
),
);
Se hai bisogno di creare un array da una stringa formattata, puoi usare la funzione PHP explode
che prende un delimitatore e una stringa, e restituisce un array, in questo modo:
$tax_string = '19,18,214,226,20';
$tax_array = explode( ',', $tax_string );
Spero che funzioni!

Perché in PHP, $tax = '19,18,214,226,20';
è una stringa. E non puoi racchiudere una stringa dentro array()
e creare un array :)
Potresti aver bisogno di qualcosa come:
function comma_separated_to_array($string, $separator = ',')
{
//Divide la stringa in base al separatore
$vals = explode($separator, $string);
//Elimina gli spazi bianchi
foreach($vals as $key => $val) {
$vals[$key] = trim($val);
}
//Restituisce un array vuoto se non trova elementi
//http://php.net/manual/en/function.explode.php#114273
return array_diff($vals, array(""));
}
e usarla così
$terms = comma_separated_to_array($tax);

Ottima funzione per separare valori separati da virgole in un array, ma eccessiva per la domanda sopra.

Grazie. 4 righe di codice con meno di 30 caratteri ciascuna non mi sembrano eccessive, credo :)
