为什么wp-cron只在页面访问时执行?

时间:2020-01-23 作者:CorinLUSI

据我所知,wp-cron在对给定域的HTTP请求之后运行。有人能给我解释一下为什么会这样吗?我不太明白为什么(计划的)wp cron事件的执行依赖于访问页面的用户?我对WordPress开发还很陌生,所以我可能只是对基本的编程概念缺乏一般性的理解。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

仅使用WordPress无法安排代码在特定时间在后台运行。WordPress与大多数(如果不是全部的话)PHP web应用程序一样,实际运行时只响应访问的URL和向服务器发出的请求。要在特定时间运行计划事件,您需要在服务器上运行一些东西,例如实际的cron作业,它可以连续运行并触发计划事件,即使WordPress尚未运行。

WordPress本身无法修改服务器行为来实现这一点,但WordPress需要能够即时安排任务,而不需要用户提供服务器专业知识,也不需要标准安装以外的其他服务器配置。为此,无论何时运行,它都会检查计划的事件,并执行计划时间已过的任何事件。对于流量高的站点,这可能会立即执行,但对于流量非常低的站点,这可能意味着代码执行延迟一天或更长时间。

最简单的解决方案是在服务器上配置一个真正的cron作业,以便根据需要自动加载WordPress。执行此操作的方法完全取决于您拥有的服务器/主机类型以及进行此类更改的权限。WordPress无法了解每种类型的托管环境,出于安全原因,它没有这种访问权限,这就是为什么它自己无法做到这一点。描述了一种用于SiteGround的方法here, 但是,您应该在自己的环境中向主机寻求帮助。

相关推荐

Cron job shedules replace?

我在看这个:Wp_Schedule_Event every day at specific time 我想知道如果我做以下事情,它会取代我所有的日程安排吗?function myprefix_custom_cron_schedule( $schedules ) { $schedules[\'every_six_hours\'] = array( \'interval\' => 21600, // Every 6 hours \'disp