Tax_query ID-uri termeni folosind variabilă

17 ian. 2017, 18:52:53
Vizualizări: 45.7K
Voturi: 5

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?

0
Toate răspunsurile la întrebare 2
0
15

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

17 ian. 2017 19:06:12
3

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);
17 ian. 2017 19:09:04
Comentarii

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

Tex0gen Tex0gen
17 ian. 2017 19:46:06

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

codiiv codiiv
17 ian. 2017 20:10:58

Sau poți folosi simplu $ids = explode(',', $tax);

Alexander Holsgrove Alexander Holsgrove
23 iun. 2020 18:52:07