如何获得随机的帖子并按日期排序

时间:2019-12-11 作者:kostikovmu

我需要得到一些随机的帖子,并按日期排序。

为了获得随机帖子,我使用了以下方法:

$query = new WP_Query(
    [
      \'post__in\' => $post_id_array,
      \'posts_per_page\' => $number,
      \'orderby\' => \'rand\'
    ]
  );
要按日期订购,我尝试了以下操作:

\'orderby\' => [\'rand\' => \'ASC\', \'date\' => \'DESC\']
但它不能正常工作。我该怎么做?

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

不幸的是,这永远行不通。”“rand”是一个随机顺序,所以不管你在日期上写了什么,你总是以随机顺序结束。

为了做到像你所描述的那样,你必须使用\'orderby\'=>\'rand\'. 然后可以按日期对结果排序。

$query = new WP_Query(
    [
        \'post__in\' => $post_id_array,
        \'posts_per_page\' => $number,
        \'orderby\' => \'rand\'
    ]
);

// Sort the resulting posts array by date
usort( $query->posts, function( $a, $b ) {
    $t1 = strtotime( $a->post_date );
    $t2 = strtotime( $b->post_date );
    return $t1 - $t2;
});

// $query->posts is now sorted and in order by date.

SO网友:nmr

首先对你的帖子进行随机排序。然后,在外部查询中,按日期对子查询中的帖子进行排序。

我会在过滤器的帮助下完成posts_requestposts_orderby. 只有在设置\'ord_rand_then_date\' => true 参数

add_filter(\'posts_request\', \'se354396_request\', 50, 2);
add_filter(\'posts_orderby\', \'se354396_orderby\', 50, 2);

function se354396_request( $sql_request, $wp_query )
{
    if ( ! $wp_query->get(\'ord_rand_then_date\', false) )
        return $sql_request;

    $sql_request = \'SELECT sub.* FROM (\' . $sql_request . \') sub ORDER BY post_date DESC\';
    return $sql_request;
}
function se354396_orderby( $orderby, $wp_query ) 
{ 
    $custom_order = $wp_query->get(\'ord_rand_then_date\', false);
    if ( $custom_order !== true && $custom_order != \'1\' )
        return $orderby;

    return \'RAND()\'; 
}

Example:

$my_posts = get_posts( [
    \'ord_rand_then_date\' => true,
    \'suppress_filters\'   => false,
    // other parameters
] );

相关推荐

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

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