wp-cronで指定した時間より前の時刻で動作する
wp-cronの仕様として、指定した日時以降にサイトにアクセスされた場合に、
バッチが実行されていなければバッチを実行するということだと思っていたのですが、
指定した時間より前の時刻で動作します。
スケジュールの指定の仕方がまずいのかなとも思ったのですが、
他に書き方が見つかりません。
ご存知の方がいらっしゃいましたら、ご教授願います。
登録したいスケジュールは毎週水曜日の13時0分0秒と毎月1日の0時0分0秒です。
/**
* set function
*/
add_action('MD_BlogCronHook','MD_BlogDo');
date_default_timezone_set( 'Asia/Tokyo' );
/**
* wp-cron start
*/
function MD_BlogCronStart() {
wp_schedule_event(time(),'weekly','MD_BlogCronHook');
wp_schedule_event(time(),'monthly','MD_BlogCronHook');
}
register_activation_hook(__FILE__, 'MD_BlogCronStart');
/**
* wp-cron stop
*/
function MD_BlogCronStop() {
wp_clear_scheduled_hook('MD_BlogCronHook');
}
register_deactivation_hook(__FILE__, 'MD_BlogCronStop');
// イベントの時間追加
add_filter('cron_schedules', 'my_interval' );
function my_interval($schedules) {
date_default_timezone_set( 'Asia/Tokyo' );
$dt_2 = new DateTime('next wednesday 130000');
$difftime = timeCalculation($dt_2);
$schedules['weekly'] = array('interval' => $difftime, 'display' => 'weekly');
$dt_2 = new DateTime('first day of next month 000000 ');
$difftime = timeCalculation($dt_2);
$schedules['monthly'] = array('interval' => $difftime, 'display' => 'monthly');
return $schedules;
}
function timeCalculation($addTime){
$dt = new DateTime('now');
$d = $addTime->diff($dt, true);
$dt_array = get_object_vars($d);
$day = $dt_array["d"] * 24 * 60 * 60;
$hour = $dt_array["h"] * 60 * 60;
$minutes = $dt_array["i"] * 60;
$second = $dt_array["s"];
return $day + $hour + $minutes + $second;
}