计划的事件从事件队列中消失

时间:2014-08-18 作者:kel

我遇到了一个问题,我已经安排了一段时间的活动,然后就停止了。查看事件队列后,我发现已计划的事件不再在队列中。

如果我停用插件,然后重新激活插件,那么时间表就会回来,并在一段时间内工作。

我不知道WordPress是否有在事件超时或类似情况下删除事件的功能。

这是我的代码:

register_activation_hook(__FILE__, \'k2_section_featured_ads_setup\');
function k2_section_featured_ads_setup() {
    wp_schedule_event(\'1395871200\', \'minutely\', \'k2_section_featured_ads_hook\');
}

register_deactivation_hook(__FILE__, \'k2_section_featured_ads_deactivation\');
function k2_section_featured_ads_deactivation() {

    $featured_next = wp_next_scheduled(\'k2_section_featured_ads_hook\');
    wp_unschedule_event($featured_next, \'k2_section_featured_ads_hook\');
}

add_action(\'k2_section_featured_ads_hook\', \'k2_section_featured_ads_check_time\');

function k2_section_featured_ads_check_time() {
    // function here
}
这是我的额外cron计划的过滤器

function k2_cron_add_schedules( $schedules ) {
    $schedules[\'quarterday\'] = array(
        \'interval\' => 14400,
        \'display\' => __(\'Once every 4 hours\')
    );
    $schedules[\'minutely\'] = array(
        \'interval\' => 60,
        \'display\' => __(\'Once every 1 minute\')
    );
    return $schedules;
}
add_filter(\'cron_schedules\', \'k2_cron_add_schedules\');

3 个回复
SO网友:Jamie Hamick

我现在的解决方案是每小时检查一次它是否正在运行,如果没有,则重新安排它。我还删除了停用等。

wp_schedule_event(time(), \'hourly\', \'my_restart_schedule_if_failed\');

function my_restart_schedule_if_failed() {
    if( !wp_next_scheduled( \'my_scheduled_minute_job\' ) ) {
        wp_schedule_event( time(), \'one_minute\', \'my_scheduled_minute_job\' );
    }
}

SO网友:kel

在把我所有的观点都倾注到这个问题上并尝试了一些建议选项之后,WordPress似乎无法处理一分钟的cron。我把时间改为5分钟,从那以后就再也没有出现过任何问题。

为了进行测试,我在几周的时间里尝试了一些东西:

将挂钩名称更改为不包含下划线[已损坏]

  • 重写插件。最初是按程序编写的,现在它的所有OOP[中断]更改为5分钟的时间表[中断]
    • EDIT: 我最初将最后一次标记为“工作”,但经过这么多个月后,它又被取消了。我仍然不确定这一切到底是怎么回事。

    SO网友:T.Todua

    此主题位于WP.ORG 会有帮助的。

    长话短说——如果cron作业出现问题、延迟或中断,它可能会被wp摘牌。

    结束

    相关推荐

    Only Showing Upcoming Events

    在此页面的侧栏中:http://lifebridgecypress.org/our-people, 我有一个即将使用此代码的事件列表。。。<ul id=\"upcoming-events\"> <?php $latestPosts = new WP_Query(); $latestPosts->query(\'cat=3&showposts=10\'); ?> <?php while ($latestPos