通过WordPress日期查询和wp_rand()
作用
对于wp_rand()
函数,您只需为其提供最小值和最大值。我们可以使用此函数返回当前时间和第一篇发布帖子的时间戳之间的随机时间戳。功能time()
将以unix时间戳的形式给出当前时间,这可能是您的最大数字。对于最小数量,可以使用第一篇发布文章的时间戳。
这个最小数字可以硬编码,因为它不太可能更改,但是如果您想运行查询来查找第一篇发布文章的时间戳,那么应该如下所示:
$first_post_query = new \\WP_Query( [
\'post_type\' => \'post\',
\'post_status\' => \'publish\',
\'posts_per_page\' => 1,
\'orderby\' => \'date\',
\'order\' => \'ASC\',
\'ignore_sticky_posts\' => true,
\'no_found_rows\' => true,
] );
$first_post = $first_post_query->posts[0];
$min_time = strtotime( $first_post->post_date_gmt ) + 1;
现在我们有了一个最小值,我们可以计算一个随机时间戳并将其转换为如下日期:
$random_timestamp = wp_rand( $min_time, time() );
$random_date = date( \'m/d/Y H:i:s\', $random_timestamp );
此随机日期可在WP\\U查询中用于检索随机帖子:
$query = new \\WP_Query( [
\'post_type\' => \'post\',
\'post_status\' => \'publish\',
\'posts_per_page\' => 1,
\'date_query\' => [
\'before\' => $random_date,
],
\'ignore_sticky_posts\' => true,
\'no_found_rows\' => true,
] );
$random_post = $query->posts[0];
The
ignore_sticky_posts
和
no_found_rows
参数用于提高查询的性能。
我希望这个查询能够为一个有规则间隔内容的站点返回相当随机的帖子。例如,如果帖子在所讨论的时间段内每天都持续发布。然而,如果出版节奏不稳定,那么这将产生次优结果。