您可以通过cron\\u计划创建新的计划时间:
function my_cron_schedules($schedules){
if(!isset($schedules["5min"])){
$schedules["5min"] = array(
\'interval\' => 5*60,
\'display\' => __(\'Once every 5 minutes\'));
}
if(!isset($schedules["30min"])){
$schedules["30min"] = array(
\'interval\' => 30*60,
\'display\' => __(\'Once every 30 minutes\'));
}
return $schedules;
}
add_filter(\'cron_schedules\',\'my_cron_schedules\');
现在,您可以安排您的功能:
wp_schedule_event(time(), \'5min\', \'my_schedule_hook\', $args);
要仅计划一次,请将其包装在函数中,并在运行之前进行检查:
$args = array(false);
function schedule_my_cron(){
wp_schedule_event(time(), \'5min\', \'my_schedule_hook\', $args);
}
if(!wp_next_scheduled(\'my_schedule_hook\',$args)){
add_action(\'init\', \'schedule_my_cron\');
}
请注意$args参数!如果不在wp\\U next\\u scheduled中指定$args参数,但在wp\\U schedule\\u事件中使用$args,将导致几乎无限多个相同的事件被调度(而不是一个)。
最后,创建要运行的实际函数:
function my_schedule_hook(){
// codes go here
}
我认为重要的是,每次加载页面时,wp cron都会检查计划并运行到期的计划作业。
因此,如果您的网站流量较低,每小时只有1名访问者,那么wp cron将仅在该访问者浏览您的网站时运行(每小时一次)。如果您的网站流量很大,访问者每秒都会请求一个页面,则会每秒触发wp cron,从而在服务器上造成额外负载。
解决方案是停用wp cron,并在最快重复计划wp cron作业的时间间隔内(在您的情况下为5分钟)通过实际cron作业触发它。
Lucas Rolff 详细说明问题并给出解决方案。
作为替代方案,您可以使用免费的第三方服务,如UptimeRobot 如果您不想停用wp cron并通过真正的cron作业触发它,请每5分钟查询一次您的站点(并触发wp cron)。