Query tax_query con ID dei termini usando variabili

17 gen 2017, 18:52:53
Visualizzazioni: 45.7K
Voti: 5

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?

0
Tutte le risposte alla domanda 2
0
15

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!

17 gen 2017 19:06:12
3

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);
17 gen 2017 19:09:04
Commenti

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

Tex0gen Tex0gen
17 gen 2017 19:46:06

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

codiiv codiiv
17 gen 2017 20:10:58

Oppure puoi semplicemente usare $ids = explode(',', $tax);

Alexander Holsgrove Alexander Holsgrove
23 giu 2020 18:52:07