WP Cron job jeden 1. und 15. des Monats

Wenn Sie versuchen, benutzerdefinierte Zeitpläne für WP Cron einzurichten, wissen Sie, dass sie ein Intervall verwenden, ist es sogar möglich, einen Cron-Job für jeden ersten des Monats einzurichten? Sowie alle fünfzehnten. Das habe ich bisher:

private function cron_schedules( $schedules ) { $midnight = strtotime( "midnight", current_time( 'timestamp' ) ); $first = strtotime( 'first day of this month', $midnight ); $fifteenth = $first + (7 * 24 * 60 * 60) * 2; $schedules['1st'] = array( 'interval' => $first, 'display' => __('1st of every month'), ); $schedules['15th'] = array( 'interval' => $fifteenth, 'display' => __('15th of every month'), ); $schedules['weekly'] = array( 'interval' => ( 7 * 24 * 60 * 60 ), 'display' => __('Weekly'), ); $schedules['biweekly'] = array( 'interval' => ( 7 * 24 * 60 * 60 ) * 2, 'display' => __('Biweekly'), ); return $schedules; } 

Solutions Collecting From Web of "WP Cron job jeden 1. und 15. des Monats"

wp_cron operiert in Intervallen und es gibt kein Intervall, das genau den ersten Tag und den 15. eines jeden Monats erreicht.

Sie könnten Ihren wp-cron Job jeden Tag ausführen und das Datum überprüfen, ähnlich wie bei einem einfachen Callback wie:

 cron_callback_wpse_113675() { $date = date('d'); if ('01' == $date || '15' == $date) { // run your function } } 

Oder verwenden Sie wp_schedule_single_event mit einem komplizierteren Callback. Etwas wie das:

 function cron_callback_v2_wpse_113675() { $date = date('d'); if (!wp_next_scheduled(cron_callback_v2_wpse_113675)) { $date = ($date < 15) ? '15' : '01'; } if ('01' == $date || '15' == $date) { // run your function switch ($date) { case '01' : wp_schedule_single_event( strtotime('+14 days',strtotime('first day of')), 'cron_callback_v2_wpse_113675' ); break; case '15' : wp_schedule_single_event( strtotime('first day of'), 'cron_callback_v2_wpse_113675' ); break; } } } 

Kaum vollständig ungetestet. Möglicherweise errorshaft. Vorbehaltsteller Keine Rückerstattung.

Ich stieß auf ein ähnliches Problem, musste jedoch am letzten Tag des Monats eine Veranstaltung auslösen. Ich fand eine alternative Lösung, die für dieses und mein Problem funktionieren würde. Anstatt die Zeitpläne zu ändern, nutzte ich den täglichen Zeitplan, um einfach meine monatlichen Aktionen auszulösen.

Zuerst habe ich einen Code wie diesen zu meiner Plugin-Aktivierung hinzugefügt, um den täglichen Check einzurichten

 function my_activation(){ // Set the cron job for the monthly cron if( ! wp_next_scheduled ( 'maybe_monthly_cron' ) ) { // This will trigger an action that will fire the "monthly_cron" action on the last day of each month at 4:00 am UTC wp_schedule_event( strtotime('04:00:00'), 'daily', 'maybe_monthly_cron'); } } register_activation_hook( __FILE__, 'my_activation' ); 

Dann fügte ich einen Job hinzu, der täglich ausgeführt wurde, um zu sehen, ob der monatliche Cron ausgetriggers werden musste

 // Check if we need to fire the monthly cron action "monthly_cron" function maybe_run_monthly_cron(){ $now = strtotime(); $this_day = date( 'j', $now ); $days_this_month = date( 't', $now ); if( $this_day == $days_this_month ){ do_action( 'monthly_cron' ); } } add_action( 'maybe_monthly_cron', 'maybe_run_monthly_cron' ); 

Um dies am 1. und 15. einzustellen, können Sie den Code oben auf etwas wie diesen einstellen:

 // Check if we need to fire the monthly cron action "monthly_cron" function maybe_run_monthly_cron(){ $now = strtotime(); $this_day = date( 'j', $now ); if( in_array( $this_day, array( 1, 15 ) ) ){ do_action( 'monthly_cron' ); } } add_action( 'maybe_monthly_cron', 'maybe_run_monthly_cron' ); 

Dann können Sie einfach die Aktion “monatlich_cron” verwenden, um Ihre Aktionen wie folgt auszuführen:

 function my_monthly_cron(){ // Execute monthly or bimonthly code here... } add_action( 'monthly_cron', 'my_monthly_cron' );