首先,定义您的自定义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在正确的时间触发。
示例:如果您以30分钟为间隔安排任务,但是4个小时内没有人访问您的网站,则只有在4小时后该访问者到达您的站点,您的cron作业才会被解雇。如果您确实需要每30分钟执行一次任务,那么建议您通过网络托管提供商设置一个合法的cron作业,以所需的时间间隔访问您的网站。
WordPress cron工作不会使您的网站变慢!
也许您在想,如果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作业中执行大型脚本的巨大优势。
可用的辅助功能:
schedule_event( $_SESSION['insert_id'] );
解雇?