我如何更改预定活动的频率?

时间:2011-05-23 作者:mike23

我在如下插件中声明了一个计划事件:

function shedule_email_alerts() {
    if ( !wp_next_scheduled( \'send_email_alerts_hook\' ) ) {
        wp_schedule_event(time(), \'hourly\', \'send_email_alerts_hook\');
    }
}
然后,我想将频率更改为“每日”,通过这样做,将原来的功能替换为:

function shedule_email_alerts() {
    if ( !wp_next_scheduled( \'send_email_alerts_hook\' ) ) {
        wp_schedule_event(time(), \'daily\', \'send_email_alerts_hook\');
    }
}
但我的活动似乎仍然每小时都在进行。我使用Core control plugin 监视CRON任务,但仍显示为“每小时一次”

3 个回复
最合适的回答,由SO网友:mike23 整理而成

好的,我可以用wp_clear_scheduled_hook()

我注释了我的日程声明,并添加了wp_clear_scheduled_hook(\'send_email_alerts_hook\') 在最后。然后停用-重新激活我的插件,它删除了我的计划挂钩。然后删除wp_clear_scheduled_hook() 并且取消了我的代码注释,现在时间表设置正确了。

找到提示here.

SO网友:Marek Tuchalski

在我看来,只有在尚未计划此类事件“send\\u email\\u alerts\\u hook”时,您才添加此事件。试试这样的方法,如果有效,请告诉我。

function shedule_email_alerts() {
    if ( !wp_next_scheduled( \'send_email_alerts_hook\' ) ) {
        wp_schedule_event(time(), \'daily\', \'send_email_alerts_hook\');
    } else {
        wp_reschedule_event(time(), \'daily\', \'send_email_alerts_hook\');
    } 
}
问题是,您将一直“重写”此事件,因此最好在第一次运行此函数时停用它。

最好的解决方案是检查这些作业是如何收集的,并检查是否已添加此事件。如果是,则检查重复性是否不同-如果是,则重新安排。您可以在wp includes/cron中找到此函数。php行~ 63

function wp_schedule_event( $timestamp, $recurrence, $hook, $args = array()) {
    $crons = _get_cron_array();
    $schedules = wp_get_schedules();

    if ( !isset( $schedules[$recurrence] ) )
        return false;

    $event = (object) array( \'hook\' => $hook, \'timestamp\' => $timestamp, \'schedule\' => $recurrence, \'args\' => $args, \'interval\' => $schedules[$recurrence][\'interval\'] );
    $event = apply_filters(\'schedule_event\', $event);

    // A plugin disallowed this event
    if ( ! $event )
        return false;

    $key = md5(serialize($event->args));

    $crons[$event->timestamp][$event->hook][$key] = array( \'schedule\' => $event->schedule, \'args\' => $event->args, \'interval\' => $event->interval );
    uksort( $crons, "strnatcasecmp" );
    _set_cron_array( $crons );
}
祝你好运!

SO网友:kaiser

尝试使用我编写的插件调试:Link to Github/Gist. 这有点老套,但它符合它的目的。

请注意wp_footer() 钩子必须出现在你的主题中。否则你就得把它挂在别的地方

结束

相关推荐

获取在Functions.php中设置的变量,并在我的Custom Post模板中回显它们

在我的函数中设置了以下函数。php文件,以允许我的自定义帖子类型“Slideshow”工作。add_action( \'the_post\', \'paginate_slide\' ); function paginate_slide( $post ) { global $pages, $multipage, $numpages; if( is_single() && get_post_type() == \'lom_s