A simple way to schedule an Minutely event in WordPress

之前一直没有注意到要在执行任务计划之前先清除,以至于每隔1分钟就添加一个新的任务计划,最后内存枯竭。

add_filter( 'cron_schedules', '_cron_add_minutely' );

function _cron_add_minutely( $schedules ) {
    // Adds once weekly to the existing schedules.
    $schedules['minutely'] = array(
            'interval' => 60,
            'display' => __( 'Minutely' )
    );
    return $schedules;
}

add_action( 'wp', '_setup_schedule' );
function _setup_schedule() {
    //wp_clear_scheduled_hook( 'itc_daily_event' ); 
    if ( ! wp_next_scheduled( 'itc_daily_event' ) ) {
        wp_schedule_event(time(), 'minutely', 'itc_minutely_event' );
    }
}

add_action( '_minutely_event',   '_do_minutely_event' );
function _do_minutely_event() {
    error_log(date('Y-m-d H:i:s') ." check you php log file");
}

删除所有的计划人物by hook name

//Removes a cron based on a hook name
function delete_cron_hooks( $hooks = array(), $blog_id = 0 ) {
    if ( is_multisite() && $blog_id != 0 ) {               
        switch_to_blog( $blog_id );
    }
    $crons = get_option( 'cron' );
    if ( !$crons ) return false;
    foreach ( $crons as $timestamp => $cron ) {
        foreach ( $hooks as $hook ) {
            if ( isset( $cron[ $hook ] ) ) {
                unset( $crons[ $timestamp ] );
            }
        }
    }
 
    update_option( 'cron', $crons );
     
     
} //end delete_cron