WP_QUERY的多个过滤条件

时间:2014-05-18 作者:jfree

我很难想出如何完成这个(非常简单的)任务:

随机获取4篇帖子,但仅从最近的10篇帖子中进行选择。

这对于随机部分非常有效,但显然可以从所有帖子中选择:

    $query = array(
        \'posts_per_page\' => 4,
        \'orderby\' => \'rand\',
        \'post__not_in\' =>array($post->ID)
    );
    $wp_query = new WP_Query($query);
基本上,我想获取一个查询的结果:

    $firstquery = array(
        \'posts_per_page\' => 10,
        \'orderby\' => \'date\',
        \'post__not_in\' =>array($post->ID),
        \'order\' => \'DESC\'
    );
然后把结果传给第一个。

任何帮助都将不胜感激。我已经考虑过合并它们,但我认为这只是给我两者的结果?有点困惑。

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

运行第一个查询las 10个帖子,然后使用array_rand posts数组上的PHP函数:

$args = array(
    \'posts_per_page\' => 10,
    \'post__not_in\' =>array( $post->ID ),
    \'orderby\' => \'post_date\',
    \'order\' => \'DESC\'
);

$query = new WP_Query( $args );

if ( $query->have_posts() ) {

  if ( $query->post_count > 4 ) {

    $query->posts = array_rand( $query->posts, 4 ); // get 4 random posts

    $query->post_count = 4; // update post count

    // for pagination, if you need it
    $query->max_num_pages = (int) ceil( $query->found_posts / 4 ); 
  }

  // After that loop as usual
  while ( $query->have_posts() ) : $query->the_post();

    // loop here

  endwhile;
  wp_reset_postdata();

}

SO网友:Nabil Kadimi

此答案不正确。。。我不能在它被接受后撤回它,请看评论。

您可以使用wp_get_recent_posts() 要获取最新的10篇帖子,请获取ID并将其提供给您的WP_Query\'spost__in 论点

global $post;

$recent_posts = wp_get_recent_posts( array(
    \'numberposts\' => 10,
    \'exclude\' => $post->id,
) );

$recent_posts_ids = array();
foreach( $recent_posts as $recent_post ) {
    $recent_posts_ids[] = $recent_post["ID"];
}

$query_args = array(
    \'posts_per_page\' => 4,
    \'orderby\' => \'rand\',
    \'post__in\' => $recent_posts_ids,
);
$wp_query = new WP_Query( $query_args );

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post