wp_schedule_event () zu einer bestimmten Zeit, täglich

Ich bin nicht gut Vers mit WP Cron, aber ich habe sie in einer meiner Website kenntnisreich verwendet. Ich habe für jede Stunde eine benutzerdefinierte Abfrage festgelegt:

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() { //... } 

Jetzt änderte sich unser Verfahren zur function und wir dachten, wir würden uns für einen Tagesplan entscheiden. Also habe ich die Dinge so eingerichtet:

 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' ); }); 

Ich mache das auf dem lokalen WAMP-Server in einer Windows-Maschine. Meine lokale PC-Zeit, wie ich bekam, Echo- echo date( 'Ymd H:i:s', current_time( 'timestamp' ) ) , ist 2016-04-11 17:18:58.

Ein Unterschied von sechs Stunden kann die GMT und meine Zeitzone (+6) sein – das ist vernünftig.

Aber das Problem ist mit der nächsten geplanten Zeit.

Ich benutze:

  • Debug Bar Cron – WordPress Plugin , und dann versucht
  • Advanced Cron Manager – Debug & Kontrolle – WordPress Plugin

zum Debuggen von Cron-Jobs.

Debug Bar Cron zeigt die aktuelle Uhrzeit ist: 11:52:54, während mein Timestamp zeigt: 17:52:52. Problem ist, die nächste Vorkommenszeit ist nicht 00:00:00, sondern

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

ACM zeigt:

 In 24 hours 12.04.2016 17:33:56 

Wie kann ich meine Abfrage / function jeden Tag zu einer bestimmten Zeit neu planen (indem ich meinen aktuellen Zeitplan bearbeite)?

Solutions Collecting From Web of "wp_schedule_event () zu einer bestimmten Zeit, täglich"

time() nur die aktuelle Zeit zurück, akzeptiert keine Eingaben.

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

Was du willst, ist morgen Mitternacht:

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

Beachten Sie, dass dies PHP- functionen sind und sie die WP-Zeitzone ignorieren, da sie die PHP-Zeitzone auf UTC zurücksetzt. Wenn Sie diese verwenden, legen Sie sie auf Mitternacht in der UTC-Zeitzone fest.

Um es in WP richtig zu machen, ist es ein Durcheinander (das funktioniert vielleicht nicht unter einigen Konfigurationen, die keine timezone_string gesetzt haben, siehe meinen Post zu DateTime in WP für weitere Details):

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

Hinweis: WP Cron kann nicht garantiert zu bestimmten Zeiten ausgeführt werden, da es durch Besuche auf der Site beeinträchtigt wird. Ich bin nicht sicher, ob wiederkehrende Läufe um Mitternacht “bleiben” oder von dort langsam abrutschen, Sie müssen sich vielleicht regelmäßig neu einstellen.