web-dev-qa-db-ja.com

Wp_schedule_event()を使って毎週イベントを修正する方法

私は毎週金曜日の午前11時30分に発生するイベントをスケジュールしたいのですが、いくつかのことがよくわかりません。私は現在、次のコードから午前11時30分にイベントを毎日予定しています。

function my_schedule() {

    $hour = 11;
    $minute = 30;
    $dayofweek = 'today';
    $frequency = 'daily';

    if ( !wp_next_scheduled( 'my_event' ) ) {
        $scheduleTime = strtotime($dayofweek." $hour:$minute am America/Montreal");
        wp_schedule_event($scheduleTime, $frequency, 'my_event' );
    } 
}

私の質問は、私が$dayofweekfridayに変更した場合、$frequencyは常に金曜日になるので$scheduleTimeweeklyに変更する必要がありますか? $frequencyが毎週金曜日に設定されている場合、$scheduleTimeはもう違いますか? wp_schedule_event()の場合、$frequency$scheduleTimeにどの程度影響を与えますか?

3
iamarnold

この機能の docs によると、デフォルトで毎週のイベントを設定することはできません。

wp_schedule_event(int $timestamp, string $recurrence, string $hook, $args = array() );

$recurrence値は次のいずれかである必要があります。

  • 「毎時」
  • "1日2回"
  • 「毎日」

コールバック関数my_eventの中で今日の日付をテストする必要があります。何かのようなもの:

function my_event() {
  # date('l') returns the formatted full day of the week 
  if ( date ('l') !== 'Friday' ) {
    return;
  }
  # do my_event things!
}

編集する

add 毎週のcronスケジュールにしたい場合は、 cron_schedules filterフックにフィルタを追加することで可能です。あなたはその例を見ることができます ここ 、それはこのような何かにうまくいくでしょう:

function 246184_weekly_cron_schedule( $schedules ) {
    $schedules[ 'weekly' ] = array( 
        'interval' => 60 * 60 * 24 * 7, # 604,800, seconds in a week
        'display' => __( 'Weekly' ) );
    return $schedules;
}
add_filter( 'cron_schedules', '246184_weekly_cron_schedule' );
3
guiniveretoo