カスタムの分類法用語IDを使用してカスタムのWP_Queryを作成したいです。
用語のIDの例:19,18,214,226,20
なぜこれが機能するのですか?
$query_args = array (
'post_type' => 'works’,
'tax_query' => array(
array(
'taxonomy' => 'materials',
'field' => 'term_id',
'terms' => array( 19,18,214,226,20 ),
)
),
);
すべての分類用語IDのすべての項目が表示されます。
しかし、これはそうではありません。
$tax = '19,18,214,226,20';
$query_args = array (
'post_type' => 'works',
'tax_query' => array(
array(
'taxonomy' => 'materials',
'field' => 'term_id',
'terms' => array( $tax ),
)
),
);
変数$tax
を使用すると、クエリ結果は最初の用語ID(19)の項目のみを表示し、その他の項目はすべて無視します。
なぜこれが起こり、IDをハードコードするのではなく、tax_queryで変数を使用することができるのでしょうか。
内部に単一の文字列を持つ配列を作っているようです。
渡す前に$ taxを配列にすることでうまくいくかどうかをチェックします。
$tax = array( 19, 18, 214, 226, 20 );
$query_args = array (
'post_type' => 'works',
'tax_query' => array(
array(
'taxonomy' => 'materials',
'field' => 'term_id',
'terms' => $tax,
)
),
);
フォーマットされた文字列から配列を作成する必要があるなら、デリミタと文字列を取り、配列を返すexplode
PHP関数を使うことができます。
$tax_string = '19,18,214,226,20';
$tax_array = explode( ',', $tax_string );
うまくいくことを願っています!
なぜなら、phpでは$tax = '19,18,214,226,20';
は文字列だからです。 array()
内に文字列をラップして配列を作成することはできません。
次のようなものが必要になるかもしれません。
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(""));
}
そしてそれを使う
$terms= comma_separated_to_array($tax);