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?
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!
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);