据我所知,*_transient()
基本上是*_option()
包装在缓存计时器中。
在这种情况下,这意味着set_transient( \'...\', true, * MINUTE_IN_SECONDS );
将not 每分钟运行/重新评估一次。相反,当访问者/用户加载了页面,并且其中的数据超过60秒时,它将运行/重新评估。这并不理想,因为它所做的是将同步方法的处理放在用户加载时间上,这不好,而且可能会搞砸,就像你经历的打嗝一样-它与此相关:
当我在同步进程运行时重新加载页面时,似乎会发生这种情况
因此,您在没有其他访问站点的时间超过60秒后访问管理员。这个_transient
因此过期,并启动my_task_sync_method()
在你的页面加载中,它一定以某种方式响应或中断了你的加载过程。
要解决此问题,首先,您应该使用Wordpress Cron, 不_transient
. Cron作业在后台运行,并坚持60秒同步,不依赖用户访问。
下面是cron任务的基本片段:
// add a 60 second cron schedule
add_filter(\'cron_schedules\', function ( $schedules ) {
$schedules[\'everyminute\'] = array(
\'interval\' => 60,
\'display\' => __(\'Every Minute\')
);
return $schedules;
});
// register your cronjob
add_action(\'wp\', function () {
if ( !wp_next_scheduled( \'my_task_sync_cronjob\' ) )
wp_schedule_event(time(), \'everyminute\', \'my_task_sync_cronjob\');
});
// the registered cron hook, that\'ll fire your function
add_action(\'my_task_sync_cronjob\', \'my_task_sync_method\');
其次,你应该确保
my_task_sync_method()
没有回显任何数据。我想这是你的症状。
请注意,我以匿名方式将函数放置在挂钩中,这样做是为了更容易在此处显示。您可能想让它们回调,以防其他开发人员想要利用您的挂钩