您可以創建一個函數並傳入您想要的每個類型和數量,然後對它們運行WP_Query,然後返回您的帖子。
例如上述
function so_getEqualPosts($number_posts, $post_types){
$postsToReturn = array();
foreach ($post_types as $post_type) {
$args = array(
'post_type' => $post_type,
'posts_per_page' => $number_posts,
'orderby' => 'date',
'order' => 'DESC'
);
$result = new WP_Query($args);
array_push($postToReturn, $result->posts);
}
usort($postsToReturn, function($a, $b) {
return strtotime($a['post_date']) - strtotime($b['post_date']);
});
return $postsToReturn;
}
**更新以匹配OP要求** 替代方案是使用一個一個StdClass;
$postsToReturn = new StdClass();
然後在每次迭代中添加類:
$postsToReturn->$post_type = $result->posts;
然後你可以把它叫做:
$posts->A
$posts->B
$posts->C
:
$posts = so_getEqualPosts(30, ["A", "B", "C"]);
帖子應該再由被訪問
等。
這是未經測試,並非常的飛行,但應該給你一個起點:)
另外,如果你不想使用一個StdClass,使'$ postsToReturn'數組和簡單'array_push ($ postsToReturn,$ result-> posts)'在每次迭代中。這會給你一個所有帖子的數組,而不是通過你的最終對象中的帖子類型來訪問。 – Nunicorn
非常感謝您這樣做,但是可以將所有這些帖子按時間順序排列在一個數組中嗎? – Paradoxetion
@Paradoxetion是的,應該是。如果你使用另一種方法('array_push($ postsToReturn,$ result-> posts)'),你會得到所有帖子的數組。這裏的困難在於,每次迭代時,您可以使用WP_Query('orderby'=>'date','order'=>'DESC'')進行排序,類型A將被排序並添加,然後鍵入B排序並添加等等,但整體數組不會被排序(儘管其中的每個類型都將被排序)。 – Nunicorn