我如何在WordPress中计划每一秒的cron?

时间:2013-02-26 作者:Frank

我想在Wp3中安排一个cron作业。5.1向预约待定的客户发送电子邮件。

下面是我正在尝试的一些代码:

For the testing am scheduling corn for each second to insert row in table.

// insert row every second
add_action(\'wp\', \'my_activation\');
function my_activation() {
    if ( !wp_next_scheduled( \'my_event\' ) ) {
        wp_schedule_event( time(), \'hourly\', \'my_event\');
    }
}

add_action(\'my_event\', \'do_this_event\');
function do_this_event() {
    global $wpdb;
    $wpdb->query("INSERT INTO `wordpress-testing`.`wp_test` (`id`, `text`) VALUES (NULL, \'b\');");
}

wp_get_schedules(\'my_event\');

//custom recurrence
add_filter( \'cron_schedules\', \'cron_add_every_sec\' );
function cron_add_every_sec( $schedules ) {
    $schedules[\'hourly\'] = array(
        \'interval\' => 1,
        \'display\' => __( \'Do Secondly\' )
    );
    return $schedules;
}
这样做可能会出错。所以请帮我度过难关。

Is cron run automatically after activation once OR its need to recurring visit after scheduled time past?

1 个回复
SO网友:fischi

我认为每秒运行一个cron并没有什么用处,但函数本身非常简单。

将筛选器添加到cron_schedules:

function f711_add_seconds( $schedules ) {
    $schedules[\'everysecond\'] = array(
        \'interval\' => 1,
        \'display\' => __(\'Every Second\')
    );
    return $schedules;
}
add_filter( \'cron_schedules\', \'f711_add_seconds\' ); 
您现在可以使用everysecond 在您的wp_schedule_event 而不是hourly.

请注意,如果站点上没有发生任何事情,Cron不会每秒执行一次,但它将被限制为每秒最多执行一次。Cron在options-下一次执行函数的时间戳。然后Cron检查时间是在未来还是在过去,如果是在过去,则执行该函数。Cron此时自动运行,但需要重新设置。所以一定要包括

if ( !wp_next_sceduled(\'my_event\') ) { /* scheduling code */ }
在代码中。

有关Cron工作原理的更多信息,请访问Codex Page.

不应覆盖hourly 正如您所做的,因为某些函数可能会使用此计划。请注意,如果没有正确编码,某些插件可能会清除您的Cronschedule(曾经有过这样的缓存插件)。

结束