Reset Transient on New Day

时间:2016-03-30 作者:MikeiLL

我有一个与API接口的插件,并将检索到的日程数据存储在transient.

将瞬态存储24小时:

set_transient($schedule_cache, $schedule_data, 60 * 60 * 24);
(我想)问题是:它是为哪个存储24小时的?我想显示今天,但是如果瞬态设置为昨晚11点,当有人加载页面时,我们将在昨天显示到今晚11点。

我正在使用的不雅观的方法是使用唯一的TODAY标识符存储第二个瞬态:

$this::$time_tracker = date(\'Fd\', strtotime("today")); # \'March30\' 
set_transient($schedule_timer, $this::$time_tracker, 60 * 60 * 48);
然后,如果当前时间跟踪器与瞬态不匹配,则删除所有瞬态(还有其他用于分页的瞬态):

if($last_look != $this::$time_tracker)
    // Delete all the transients and save new ones
最小工作示例:

class transientIssues {

    public function __construct(){
        $this::$time_tracker = date(\'Fd\', strtotime("today"));
    }

        $schedule_cache = \'sched_che\';
        $schedule_timer = \'sched_tim\';

        $last_look = get_transient($schedule_timer);

        if ( $last_look != $this::$time_tracker ){
            // delete_transient( $schedule_cache );
            // Replaced above with the following so we could deal with multiple date ranges being called.
            global $wpdb;
            $wpdb->query( "DELETE FROM `$wpdb->options` WHERE `option_name` LIKE (\'%sched_ch%\' OR \'%sched_tim%\')" );
        }

        if ( false === get_transient( $schedule_cache ) ) {

            $api = $this->instantiate_API();
            if ($api == \'NO_SOAP_SERVICE\') {
                pr($api);
                }else{
                $api->gettData(); 
                }

            set_transient($schedule_timer, $this::$time_tracker, 60 * 60 * 24);
            set_transient($schedule_cache, $schedule_data, 60 * 60 * 24);

             // END caching*/
        }
}
这似乎是一种合理的方法吗?我欢迎提出见解。

1 个回复
SO网友:Nicolai Grossherr

并没有可靠的方法来实现您想要的Transients API - 甚至,如果你一直在考虑的话WP Cron 系统问题很简单:这些API系统依赖于用户输入。如果你想了解更多,做一项研究,因为这已经讨论过好几次了<要获得可靠的解决方案,您可以使用real—WP one几乎与之无关,在我看来,它甚至不应该被称为类似的解决方案,但无论如何—CRON系统和您可以使用它设置的cronjobs。我这里不深入,因为你会在互联网上找到足够的关于“如何将真正的CRON与WordPress结合使用”的起始信息。正如@markkaplen正确指出的,WP-CRON和real-CRON可以结合使用来实现您的目标。

相关推荐

Set Transient expiration

我有一个页面,每天显示一篇随机的帖子。为了每24小时更换一次岗位,我使用set_transient(\'totd_trans_post_id\', $totd[0]->ID, (60*60*24)); 我想知道的是:插入并保存代码后,是否立即开始倒计时(60*60*24)</如果是:如果让代码运行23个小时,然后决定“更新”代码,会发生什么。倒计时会重新开始吗</如果48小时内没有人访问该网站,是否仍会过期?还是有人必须在24小时后访问才能“运行”它