web-dev-qa-db-ja.com

wp_schedule_event()、特定の時間に、毎日

私はWP Cronに精通していませんが、私は自分のサイトの1つでそれらを知識豊富に使用しました。 1時間ごとにカスタムクエリを設定します。

add_action( 'init', function () {
    if( ! wp_next_scheduled( 'expire_cpt' ) ) {
        wp_schedule_event( time(), 'hourly', 'expire_cpt' );
    }
    add_action( 'expire_cpt', 'pre_expire_the_offers' );
});
function pre_expire_the_offers() {
 //...
}

今度は機能への私達の手順は変わり、私達は毎日のスケジュールに行くことを考えた。だから私はこのように物事を設定しました:

add_action( 'init', function () {

    //Used once to delete all the schedule
    //wp_clear_scheduled_hook('expire_cpt');

    //I assumed, by clearing, I no-longer need this
    //$timestamp = wp_next_scheduled( 'expire_cpt' );
    //wp_unschedule_event( $timestamp, 'expire_cpt' );

    if( ! wp_next_scheduled( 'expire_cpt' ) ) {
        //Need to run this at 24:00:00 everyday, not 24 hours from now
        wp_schedule_event( time('00:00:00'), 'daily', 'expire_cpt' );
    }
    add_action( 'expire_cpt', 'pre_expire_the_offers' );
});

私はこれをWindowsマシンのローカルWAMPサーバーでやっています。私のローカルPCの時間は、echo date( 'Y-m-d H:i:s', current_time( 'timestamp' ) )とエコーしながら、2016-04-11 17:18:58です。

6時間の差がGMTと私のタイムゾーン(+6)になる可能性があります - それは合理的です。

しかし問題は次の予定時刻にあります。

私が使っている:

cronジョブをデバッグするためのものです。

Debug Bar Cronは現在の時刻が11:52:54であることを示し、私のタイムスタンプは17:52:52を示しています。問題は、次回の発生時刻が00:00:00ではありませんが、

2016-04-12 11:33:56
1460460836
24 hours

ACMは示しています:

In 24 hours
12.04.2016 17:33:56

どのようにして毎日のクエリ/機能 を特定の時間にスケジュールし直すことができますか (現在のスケジュールを編集する)?

4
Mayeenul Islam

time()は現在時刻のみを返します。入力は受け付けません。

$time = time(); // works out to 2016-04-11T12:11:34+00:00

あなたが望むのは明日の真夜中です。

$tomorrow = strtotime( 'tomorrow' ); // works out to 2016-04-12T00:00:00+00:00

これらはPHP関数であり、WPタイムゾーンをUTCにリセットするため、PHPタイムゾーンを無視することに注意してください。そのため、これらを使用する場合は、UTCタイムゾーンの真夜中に設定しています。

WPで正しく理解するのは面倒です(これはtimezone_stringが設定されていない設定ではうまくいかないかもしれません。詳細は WPのDateTimeに関する投稿 を参照してください)。

$date = new DateTime( 'tomorrow', new DateTimeZone( get_option( 'timezone_string' ) ) );
// works out to 2016-04-12T00:00:00+03:00
$timestamp = $date->getTimestamp();

注:WP Cron notは、サイトへの訪問によって引き起こされるため、正確な時間に実行されることが保証されています。それともゆっくりそこから滑り落ちるでしょう、あなたは定期的に再調整する必要があるかもしれません。

11
Rarst