Tax queryまたはcategory__inを指定してWP_Queryを呼び出すと、要求されたカテゴリの配列の最初のカテゴリからのみ投稿が表示されます。
$query = new WP_Query(
array(
"tax_query" => array(
array(
"taxonomy" => "category",
"field" => "term_id",
"terms" => array(1, 2, 3)
)
),
"posts_per_page" => -1
)
);
これは$ query-> requestからのSQLクエリです。
SELECT wp_posts.*
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_relationships AS tt1 ON (wp_posts.ID = tt1.object_id)
INNER JOIN wp_term_relationships AS tt2 ON (wp_posts.ID = tt2.object_id)
WHERE 1=1
AND (wp_term_relationships.term_taxonomy_id IN (1,
2,
3)
AND tt1.term_taxonomy_id IN (1)
AND tt2.term_taxonomy_id IN (1))
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'future'
OR wp_posts.post_status = 'draft'
OR wp_posts.post_status = 'pending'
OR wp_posts.post_status = 'private')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
結果リストにカテゴリ1の投稿のみが表示されます。クエリの何が問題になっていますか?
問題が見つかりました。私は交換しました:
$posts = $query->get_posts();
と:
$posts = array();
if ($query->have_posts()){
while ($query->have_posts()){
$query->next_post();
array_Push($posts, $query->post);
}
}
そして、すべてが今うまくいっています。