WordPress的。获取每种内容类型的相同数量的帖子

时间:2016-11-06 11:35:16

标签: php wordpress loops

假设我要显示30个帖子:10个类型为“A”,10个类型为“B”,10个类型为“C”。按发布日期排序。

我该怎么做?

我的意思是我可以做到

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

$posts = get_posts( $args );

但它会给我带来30个最新帖子 - 而不是每个帖子中的10个。

1 个答案:

答案 0 :(得分:1)

你可以创建一个函数并传入你想要的每个类型和数量,然后对它们运行WP_Query,然后返回你的帖子。

e.g。

  <li><a href="/index.php?cmd=contact">Contact</a></li>

**以上更新以符合OP要求** 另一种方法是使用StdClass;

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;
}

然后在每次迭代中添加到类:

$postsToReturn = new StdClass();

然后你可以用:

来调用它
$postsToReturn->$post_type = $result->posts;

然后可以通过以下方式访问帖子:

$posts = so_getEqualPosts(30, ["A", "B", "C"]);

这是未经测试的,并且非常实时,但应该给你一个起点:)