运行在不正确的时间间隔的Wordpress cron

时间:2015-11-25 13:34:31

标签: php wordpress cron

出于测试目的,我保留了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
}

1 个答案:

答案 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成员)回答。