シナリオは、現地時間の真夜中(00:00)にinsert_post関数を実行することです。平日は毎日走らなければならない。
function add_daily_task(){
if((date('l', time()) != 'Saturday') || (date('l', time()) != 'Sunday')){
// insert post
}
}
if(!wp_next_scheduled( 'add_daily_task_schedule')){
wp_schedule_event(time(), 'daily', 'add_daily_task_schedule');
// how should change time() to meet my local schedule?
}
add_action('add_daily_task_schedule', 'add_daily_task');
wp_schedule_eventは、あなたがしようとしているようにPRECISE時間測定には使用できません。 wp_schedule_eventを使用してスケジュールされたイベントは、実行がスケジュールされたときに正確に実行されることはめったになく、いつか - - それが構成された時刻に実行されます。
これを理解するためには、あなたがそれを見るように依頼するまで、phpはそれが何時であるかを知らないということを理解しなければなりません。 Wordpressは、誰かがあなたのウェブサイトを訪れるたびに時間をチェックします。次に、現在の時刻とスケジュールされたタスクの時刻とを比較します。時間がスケジュールされた時間以上(後)の場合、タスクを実行します。
ですから、あなたがあなたの時間スケジューリング問題を考え出したとしても、あなたの選択した時間が経過しそして誰かがあなたのウェブサイトをロードするまであなたのタスクは実行されないことを意味します。
それでも、この機能を試してみたいのであれば、考えられる解決策が1つあります。 functions.phpに新しい間隔を追加します
function cron_add_weekly( $schedules ) {
// Adds once weekly to the existing schedules.
$schedules['weekly'] = array(
'interval' => 604800,
'display' => __( 'Once Weekly' )
);
return $schedules;
}
関数をwp_schedule_event(time(), 'weekly', 'add_daily_task_schedule');
に変更してください
次の土曜日の真夜中にこれを実行すると、Wordpressは毎週同じ時刻にこのスケジュールを実行しようとします(誰かがあなたのサイトに行ってスケジュールをトリガーすると仮定します)。
関数:
time()
gMTタイムゾーンのUNIXタイムスタンプを与えます。
あなたがGMT + 2であるならば、あなたは使うことができます:
time() + 2*60*60;
またはGMT-4の場合は、次のものを使用できます。
time() - 4*60*60;
コード内でtime()をmytime()に置き換えます。
function mytime(){
$gmt_offset_in_hours=-2; // for GMT-2 (EDIT this value)
return time() + $gmt_offset_in_hours*60*60;
}
何が問題なのかよくわかりませんが、time()
の使用は間違っています。WordPressのタイムゾーン設定を考慮したサイトの現地時間ではなく、せいぜいサーバーの現地時間です。
あなたが使うべき関数は current_time です。