私は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
どのようにして毎日のクエリ/機能 を特定の時間にスケジュールし直すことができますか (現在のスケジュールを編集する)?
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は、サイトへの訪問によって引き起こされるため、正確な時間に実行されることが保証されています。それともゆっくりそこから滑り落ちるでしょう、あなたは定期的に再調整する必要があるかもしれません。