私はproduct
(jigoshop製品)と呼ばれるカスタム投稿タイプのすべての分類内のすべての投稿を印刷しようとしています。だから私は$cats = get_terms('product_cat');
を使ってすべての分類法を取得し、それからそれらすべてをループ処理し、分類法の範囲内にあるすべての投稿を取得します。問題は、うまくいかないことです。それはただ空白を返します!
$uposts = get_posts(array(
'post_type' => 'product',
'numberposts' => -1,
'tax_query' => array(
'taxonomy' => $cat->taxonomy,
'field' => 'slug',
'terms' => array($cat->slug),
'operator' => 'IN'
)
));
'terms' => array($cat->slug)
を'terms' => $cat->slug
に変更すると、tax_queryを完全に無視するかのように、 all postsが返されます。
これが失敗する原因は何でしょうか。私はoperator
で遊んでみました。field
をIDに変更しました(そしてまた、用語として$cat->ID
を送っています)...何もしません!
$ catの値は以下のとおりです。
stdClass Object
(
[term_id] => 114
[name] => Ny testkategori
[slug] => ny-testkategori
[term_group] => 0
[term_taxonomy_id] => 115
[taxonomy] => product_cat
[description] =>
[parent] => 0
[count] => 2
[meta_id] => 3
[jigoshop_term_id] => 114
[meta_key] => order
[meta_value] => 1
)
そのため、$ cat-> slugと$ cat-> taxonomyは有効な値です。
tax_queryはtaxクエリ引数の配列を受け取ります(配列の配列を受け取ります)が、単一の配列のみを使用しています。正しいコードは以下の通りです。
$uposts = get_posts(
array(
'post_type' => 'product',
'numberposts' => -1,
'tax_query' => array(
array(
'taxonomy' => $cat->taxonomy,
'field' => 'slug',
'terms' => array($cat->slug),
'operator' => 'IN',
)
)
)
);
詳しくは このページ をご覧ください。