首先,定义自定义cron作业计划。
add_filter(\'cron_schedules\', array($this, \'cron_schedules\'));
public function cron_schedules($schedules){
$prefix = \'cron_\';// Avoid conflict with other crons. Example Reference: cron_30_mins
$schedule_options = array(
\'30_mins\' => array(
\'display\' => \'30 Minutes\',
\'interval\' => \'1800\'
),
\'1_hours\' => array(
\'display\' => \'Hour\',
\'interval\' => \'3600\'
),
\'2_hours\' => array(
\'display\' => \'2 Hours\',
\'interval\' => \'7200\'
)
);
/* Add each custom schedule into the cron job system. */
foreach($schedule_options as $schedule_key => $schedule){
$schedules[$prefix.$schedule_key] = array(
\'interval\' => $schedule[\'interval\'],
\'display\' => __(\'Every \'.$schedule[\'display\'])
);
}
return $schedules;
}
您需要决定实际安排活动的地点和时间。
以下是调用自定义类方法的示例代码片段:
$schedule = $this->schedule_task(array(
\'timestamp\' => current_time(\'timestamp\'), // Determine when to schedule the task.
\'recurrence\' => \'cron_30_mins\',// Pick one of the schedules set earlier.
\'hook\' => \'custom_imap_import\'// Set the name of your cron task.
));
以下是实际安排活动的代码:
private function schedule_task($task){
/* Must have task information. */
if(!$task){
return false;
}
/* Set list of required task keys. */
$required_keys = array(
\'timestamp\',
\'recurrence\',
\'hook\'
);
/* Verify the necessary task information exists. */
$missing_keys = array();
foreach($required_keys as $key){
if(!array_key_exists($key, $task)){
$missing_keys[] = $key;
}
}
/* Check for missing keys. */
if(!empty($missing_keys)){
return false;
}
/* Task must not already be scheduled. */
if(wp_next_scheduled($task[\'hook\'])){
wp_clear_scheduled_hook($task[\'hook\']);
}
/* Schedule the task to run. */
wp_schedule_event($task[\'timestamp\'], $task[\'recurrence\'], $task[\'hook\']);
return true;
}
现在,您只需调用自定义cron任务的名称。在本例中,cron任务名称为
custom_imap_import
.
add_action(\'custom_imap_import\', array($this, \'do_imap_import\'));
public function do_imap_import(){
// .... Do stuff when cron is fired ....
}
所以在这个例子中,
$this->do_imap_import();
每30分钟调用一次(假设您的网站有足够的流量)。
注释需要进行页面访问,以便您的cron在正确的时间启动。
Example: 如果您每隔30分钟安排一项任务,但4小时内没有人访问您的站点,则在该访问者4小时后访问您的站点之前,您的cron作业不会被解雇。如果您确实需要每30分钟启动一次任务,建议您通过web托管提供商设置一个合法的cron作业,以便在所需的时间间隔访问您的网站。
WordPress cron jobs don\'t make your website slow!
也许您在想,如果cron脚本需要很长时间才能执行,访问者是否必须等到脚本执行完毕。没有!这怎么可能呢?如果你看看
wp-cron.php
文件您将找到一行
ignore_user_abort(true);
这是一个
php.ini
设置如果停止加载站点/脚本,脚本将不会停止执行的配置。
如果你看看wp-includes/cron.php
文件,您会发现这样一行:
wp_remote_post( $cron_url,
array(\'timeout\' => 0.01,
\'blocking\' => false,
\'sslverify\' => apply_filters(\'https_local_ssl_verify\', true)) );
这意味着WordPress将只等待0.01秒来触发执行,然后它将中止,但正如您所设置的
ignore_user_abort
到
true
将执行脚本。这个功能对于在WordPress cron作业中执行大型脚本来说是一个巨大的优势。
Functions available for aid: