我如何创建一个持续一天的随机帖子

时间:2011-05-12 作者:arnold

如何创建随机帖子,但在刷新页面时不应更改

我想一个随机的帖子,将持续一天,24小时或一天后,它会随机改变帖子,这是可能的吗?或者有没有一个插件可以做到这一点,

实际上,我想创造的就像是“一天的随机小费”,你知道的

我希望有人能理解我的问题

请帮忙,任何帮助都将不胜感激。

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

下面是一些按照您的要求执行的代码,并使用其他人强调的想法:

<?php
if ( false === ( $totd_trans_post_id = get_transient( \'totd_trans_post_id\' ) ) ) {
     $args = array(\'numberposts\' => 1, \'orderby\' => \'rand\');
     $totd = get_posts($args);
     $midnight = strtotime(\'midnight +1 day\');
     $timenow = time();
     $timetillmidnight = $midnight - $timenow;
     echo $midnight;
     echo ",".$timenow;
     set_transient(\'totd_trans_post_id\', $totd[0]->ID, $timetillmidnight);
} else {
    $args = array(\'post__in\' => array($totd_trans_post_id));
    $totd = get_posts($args);
}

foreach( $totd as $post ) : setup_postdata($post); ?>
    <div>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        <?php the_content(); ?>
    </div>
<?php endforeach; ?>
get_posts() help 再加上我的编码方式,应该可以让每日邮报的提示在每天午夜更改。

这是可以改进的,因为我们显示的是随机的,没有什么可以阻止同一帖子连续显示两次。。。

SO网友:Otto

转瞬即逝似乎需要付出很多额外的努力。相反,只要使用MySQL的RAND函数可以作为可复制随机数的种子。

使用如下函数:

function force_random_day_seed($orderby) {
    $seed = floor( time() / DAY_IN_SECONDS );
    $orderby=str_replace(\'RAND()\', "RAND({$seed})", $orderby);
    return $orderby;
}
然后,围绕您的WP\\u查询或get\\u posts或检索这篇文章的任何内容,使用以下筛选代码:

add_filter(\'posts_orderby\', \'force_random_day_seed\');
$args = array(\'numberposts\' => 1, \'orderby\' => \'rand\');
$totd = get_posts($args);
remove_filter(\'posts_orderby\', \'force_random_day_seed\');
这将添加过滤器,获取帖子,然后删除过滤器。

通过将种子设置为每天更改一次的数字,则随机数将在每天的每次都生成相同的答案。然后,它会在每一天\\u IN\\u秒内给出一个不同的随机数。

无瞬变,无需存储数据。

Update for WordPress 4.5+

WordPress 4.5+:现在支持包含种子值的随机排序:

$rand = sprintf( \'RAND(%d)\', floor( time() / DAY_IN_SECONDS ) );
$args = array( \'numberposts\' => 1, \'orderby\' => $rand );
$totd = get_posts($args);
参见票证#35692 了解更多信息。

SO网友:Geert

正如kaiser所说,您可以使用瞬态API。只需存储一个生存期为24小时的随机帖子ID即可。To select a random post you can set the orderby argument of get_posts() to "rand".

用例示例:

function wpse17056_twentyfour_sticky_post()
{
    $transient = get_transient( \'twentyfour_sticky_post\' );

    // set transient if none is present    
    if ( false === $transient ) 
    {
        $rand_post = get_posts( array( \'numberposts\' => 1, \'orderby\' => \'rand\') ); 
        set_transient( \'twentyfour_sticky_post\', $rand_post[0]->ID, DAY_IN_SECONDS );
    }
}
add_action( \'init\', \'wpse17056_twentyfour_sticky_post\', 0 );

SO网友:kaiser

与交互the Transients API. 您可以在其上附加“粘性”之类的内容,或者附加特定的类别或术语。

结束

相关推荐