在每年的每个季度末执行代码

时间:2019-06-27 作者:Michele Fortunato

每次到季度末(3月30日、6月30日、9月30日和12月31日),我都需要执行一次脚本。

我找到了wp_schedule_event 在文档上(https://codex.wordpress.org/Function_Reference/wp_schedule_event) 我生成了以下代码片段

// Custom Cron Recurrences
function custom_cron_job_recurrence( $schedules ) {
    $schedules[\'quarterly\'] = array(
        \'display\' => __( \'quarterly\', \'textdomain\' ),
        \'interval\' => 7884000,
    );
    return $schedules;
}
add_filter( \'cron_schedules\', \'custom_cron_job_recurrence\' );

// Schedule Cron Job Event
function custom_cron_job() {
    if ( ! wp_next_scheduled( \'\' ) ) {
        wp_schedule_event( current_time( \'timestamp\' ), \'quarterly\', \'\' );
    }
}
add_action( \'wp\', \'custom_cron_job\' );
不过,我不确定时钟是否会从1月1日开始计时。

哪种方法是正确的?

1 个回复
SO网友:Martín Di Felice

您可以使用wp_schedule_event 作用因此,根据您的代码,第一次执行将立即执行,接下来的执行将在7884000秒后执行(大约91.25天)。

我不建议使用这种方法,因为WP cron调度时段只接受以秒为单位的固定时段。我要做的是每天安排时间,并在执行操作之前检查当天是否是四个选项之一:3月30日、6月30日、9月30日或12月31日。

类似于:

function custom_cron_job() {
    if ( ! wp_next_scheduled( \'custom_cron_job_run\' ) ) {
        wp_schedule_event( current_time( \'timestamp\' ), \'daily\', \'custom_cron_job_run\' );
    }
}

function custom_cron_job_run() {
    if ( in_array( date( \'n/j\' ), [ \'3/30\', \'6/30\', \'9/30\', \'12/31\' ], true ) ) {
         // Do your stuff.
    }
}

add_action( \'wp\', \'custom_cron_job\' );
add_action( \'custom_cron_job_run\', \'custom_cron_job_run\' );