web-dev-qa-db-fra.com

Termes Tax_query ID utilisant variable

Je souhaite créer un WP_Query personnalisé à l'aide de l'ID de termes de taxonomie personnalisés.

Exemple de l'identifiant du terme: 19,18,214,226,20

Pourquoi ça marche:

$query_args = array (
    'post_type' => 'works’,
    'tax_query' => array(
        array(
            'taxonomy'  => 'materials',
            'field'     => 'term_id',
            'terms'     => array( 19,18,214,226,20 ),
        )
    ),
);

Il affiche tous les éléments de tous les identifiants de taxonomie,

Mais cela ne veut pas:

$tax = '19,18,214,226,20';

$query_args = array (
    'post_type' => 'works',
    'tax_query' => array(
        array(
            'taxonomy'  => 'materials',
            'field'     => 'term_id',
            'terms'     => array( $tax ),
        )
    ),
);

En utilisant la variable $tax, le résultat de la requête affiche uniquement les éléments avec le premier ID de terme (19) et ignore tous les autres.

Pourquoi cela se produit-il et comment puis-je utiliser la variable dans tax_query au lieu de coder en dur l'ID?

2
Alex Costa

On dirait que vous créez un tableau avec une seule chaîne à l'intérieur.

Vérifiez si vous faites passer $ tax dans un tableau avant de le passer:

$tax = array( 19, 18, 214, 226, 20 );

$query_args = array (
    'post_type' => 'works',
    'tax_query' => array(
        array(
            'taxonomy'  => 'materials',
            'field'     => 'term_id',
            'terms'     => $tax,
        )
    ),
);

Si vous devez créer un tableau à partir d'une chaîne mise en forme, vous pouvez utiliser la fonction explode PHP qui prend un délimiteur et une chaîne, et retourne un tableau, comme suit:

$tax_string = '19,18,214,226,20';
$tax_array = explode( ',', $tax_string );

J'espère que ça marche!

5
Pedro Coitinho

Parce qu'en php, $tax = '19,18,214,226,20'; est une chaîne. et vous ne pouvez pas envelopper une chaîne dans array() et créer un tableau :)

Vous pouvez avoir besoin de quelque chose comme:

function comma_separated_to_array($string, $separator = ',')
{
  //Explode on comma
  $vals = explode($separator, $string);

  //Trim whitespace
  foreach($vals as $key => $val) {
    $vals[$key] = trim($val);
  }
  //Return empty array if no items found
  //http://php.net/manual/en/function.explode.php#114273
  return array_diff($vals, array(""));
}

et l'utiliser comme

$terms= comma_separated_to_array($tax);
0
codiiv