2016-11-06 51 views
1

假設我想顯示30個帖子:10個「A」型,10個「B」型和10個「C」型。按發佈日期排序。WordPress。獲取每個內容類型的帖子的相同數量

我該怎麼做?

我的意思是我可以做

$args = array(
    'posts_per_page' => 30, 
    'post_type' => array("A", "B", "C"), 
); 

$posts = get_posts($args); 

但它會帶給我剛剛30最新的帖子 - 不是每個人的10。

回答

1

您可以創建一個函數並傳入您想要的每個類型和數量,然後對它們運行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"]); 

帖子應該再由被訪問

等。

這是未經測試,並非常的飛行,但應該給你一個起點:)

+0

另外,如果你不想使用一個StdClass,使'$ postsToReturn'數組和簡單'array_push ($ postsToReturn,$ result-> posts)'在每次迭代中。這會給你一個所有帖子的數組,而不是通過你的最終對象中的帖子類型來訪問。 – Nunicorn

+0

非常感謝您這樣做,但是可以將所有這些帖子按時間順序排列在一個數組中嗎? – Paradoxetion

+0

@Paradoxetion是的,應該是。如果你使用另一種方法('array_push($ postsToReturn,$ result-> posts)'),你會得到所有帖子的數組。這裏的困難在於,每次迭代時,您可以使用WP_Query('orderby'=>'date','order'=>'DESC'')進行排序,類型A將被排序並添加,然後鍵入B排序並添加等等,但整體數組不會被排序(儘管其中的每個類型都將被排序)。 – Nunicorn

相關問題