2

専門家、

現在、私の wordpress プラグインの 1 つに、以下のスケジュールに従って実行される cron があります。wp_schedule_event( time(), 'hourly', 'w4pr_cron' ); これを変更して、特定の時間範囲で 5 分ごとに実行したいと考えています。

たとえば、ご存知のように、現在のコードは 1 日に 1 時間ごとに実行されます。(1日24ラン)。これを午前 5 時から午前 6 時 30 分 (EST) の間だけ 5 分ごとに実行したいと思います (1 日 18 回実行)。

どんな助けでも大歓迎です!

ありがとうトーマス

4

2 に答える 2

10

最初にカスタム間隔を作成します。これに関する詳細については、こちらをご覧ください。

 add_filter( 'cron_schedules', 'cron_add_5min' );

 function cron_add_5min( $schedules ) {
    $schedules['5min'] = array(
        'interval' => 5*60,
        'display' => __( 'Once every five minutes' )
    );
    return $schedules;
 }

プラグインによって登録されたイベントのスケジュールを解除したことを確認してください。

wp_unschedule_event( next_scheduled_event( 'w4pr_cron' ), 'w4pr_cron' );

次に、この再発間隔でイベントを午前5時に開始するようにスケジュールします。

if( time() > strtotime( 'today 5:00' ) )
    wp_schedule_event( strtotime( 'tomorrow 5:00' ), '5min', 'w4pr_cron' );
else
    wp_schedule_event( strtotime( 'today 5:00' ), '5min', 'w4pr_cron' );

w4pr_cronは関数ではなく、関数がアタッチされたフックです。したがって、タイムスタンプが指定された時間間隔内にない場合、このフックが呼び出されても何も起こらないようにする必要があります。したがって、functions.phpまたはページが読み込まれるたびに実行される場所に、次のように入力します。

add_action( 'init', function() {
    $start = strtotime( 'today 5:00' );
    $end = strtotime( 'today 6:30' );
    if( !(time() > $start && time() < $end) ) remove_all_actions( 'w4pr_cron' );
}
于 2012-12-31T19:23:12.653 に答える
1

最初に、5 分ごとに実行するカスタム cron スケジュールを追加する必要があります。

 // Add cron interval of 60 seconds
function addCronMinutes($array) {
    $array['minute'] = array(
            'interval' => 60,
            'display' => 'Once a Minute',
    );
    return $array;
}
add_filter('cron_schedules','addCronMinutes');

ただし、余分なオーバーヘッドを発生させずに特定の時間枠内でのみ実行できるようにするには、特定のイベントごとにスケジュールを設定しない方がよい場合があります。

もう 1 つのオプションは、トリガーにロジックを配置して、指定された時間枠でのみ関数を実行することですが、これは cron が 5 分ごとに起動されるトラフィックの多いサイトで余分なオーバーヘッドが発生します。

于 2012-12-31T19:04:53.990 に答える