出于测试目的,我保留了cron的短时间间隔,当功能正常工作时,我将其更改为所需的时间间隔。 每当我更改ex:from' three_days'的时间间隔时至'五分钟'或者来自' five_minutes'到'十五分钟',cron以较早的设定时间间隔运行而不是更新的时间间隔。我完全对此感到困惑。
这可能是什么原因,请帮助我解决这个问题。
这是我的代码:
add_filter('cron_schedules', 'filter_cron_schedules');
function filter_cron_schedules($schedules) {
$schedules['fifteen_minutes'] = array(
'interval' => 900, // seconds
'display' => __('Every 15 minutes')
);
$schedules['twenty_minutes'] = array(
'interval' => 1200, // seconds
'display' => __('Every 20 minutes')
);
$schedules['three_days'] = array(
'interval' => 259200, // seconds
'display' => __('Every 3 days')
);
$schedules['five_minutes'] = array(
'interval' => 300, // seconds
'display' => __('Every 5 minutes')
);
return $schedules;
}
// Schedule the cron
add_action('wp', 'bd_cron_activation');
function bd_cron_activation() {
if (!wp_next_scheduled('bd_cron_cache')) {
wp_schedule_event(time(), 'twenty_minutes', 'bd_cron_cache'); // hourly, daily, twicedaily
}
}
// Firing the function
add_action('bd_cron_cache', 'bd_data');
function bd_data() {
// My Logic
}
答案 0 :(得分:0)
以下是该问题的修复方法: 以前在//安排我的代码的cron部分,我正在检查cron是否未安排,然后重新安排cron。由于我的cron已经设置,因此条件返回false并且没有设置新的间隔。
// Schedule the cron
add_action('wp', 'bd_cron_activation');
function bd_cron_activation() {
if (!wp_next_scheduled('bd_cron_cache')) {
wp_schedule_event(time(), 'twenty_minutes', 'bd_cron_cache'); // hourly, daily, twicedaily
}
}
修复方法是首先检查事件是否按照您的时间间隔进行安排,如果没有,则从上一个时间间隔取消预定,并使用新的时间间隔重新安排。 以下是相同的代码:
add_filter('cron_schedules', 'filter_cron_schedules');
function filter_cron_schedules($schedules) {
$schedules['fifteen_minutes'] = array(
'interval' => 900, // seconds
'display' => __('Every 15 minutes')
);
$schedules['twenty_minutes'] = array(
'interval' => 1200, // seconds
'display' => __('Every 20 minutes')
);
$schedules['three_days'] = array(
'interval' => 259200, // seconds
'display' => __('Every 3 days')
);
$schedules['five_minutes'] = array(
'interval' => 300, // seconds
'display' => __('Every 5 minutes')
);
return $schedules;
}
// Schedule the cron
add_action('wp', 'bd_cron_activation');
function bd_cron_activation() {
if ( wp_get_schedule('bd_cron_cache') !== 'two_minutes' ) {
// Above statement will also be true if NO schedule exists, so here we check and unschedule if required
if ( $time = wp_next_scheduled('bd_cron_cache'))// Get Previously scheduled time interval
wp_unschedule_event($time, 'bd_cron_cache'); // Unschedule the event for that time interval
wp_schedule_event(time(),'two_minutes','bd_cron_cache'); // Scheduling out event with new time interval.
}
}
// Firing the function
add_action('bd_cron_cache', 'bd_data');
function bd_data() {
// My Logic
}
这个修复的核心逻辑由@TheDeadMedic(wordpress stackexchange成员)回答。