wp-cronの仕様として、指定した日時以降にサイトにアクセスされた場合に、  
バッチが実行されていなければバッチを実行するということだと思っていたのですが、  
指定した時間より前の時刻で動作します。

スケジュールの指定の仕方がまずいのかなとも思ったのですが、  
他に書き方が見つかりません。  
ご存知の方がいらっしゃいましたら、ご教授願います。

登録したいスケジュールは **毎週水曜日の１３時０分０秒** と **毎月１日の０時０分０秒** です。

```

    /**
     * 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;
    }
    
```
CC BY-SA 3.0
2015-08-13T09:12:10.003
14363
2015-09-12T11:55:27.560
2015-08-13T10:04:48.523
9336
9336
question
wordpress
wp-cronで指定した時間より前の時刻で動作する
```

    function MD_BlogCronStart() {
        $dt = new DateTime('now');
        $today = $dt->format('Y-m-d 00:00:00'); # 時間を加味しない形に変更
        wp_schedule_event(strtotime($today),'weekly','MD_BlogCronHook');
        wp_schedule_event(strtotime($today),'monthly','MD_BlogCronHook');
    }
    
    
    function timeCalculation($addTime){
        $dt = new DateTime('today'); # now から today に変更
    
```

以上のように変えてみました。  
２行目のnowもtodayに変えたら3行目は不要かな・・・？

ひとまずこれで待機してみます。
CC BY-SA 3.0
2015-08-13T11:45:01.013
14389
2015-08-13T11:45:01.013
9336
14363
answer