WP-Cron WP-Shedule Funktion wie ein Cronjob ausführen

1 min read

Um eine Funktion regelmäßig wie ein Cronjob auszuführen ohne dafür einen Extra Cronjob in all-inkl oder auf externen Plattformen einzurichten kann man die internen WP_Shedule Cronjobs verwenden. Diese funktionieren wie ein Cronjob, bei wenig Traffic kann es jedoch sein, dass ein Cronjob erst weit nach der definierten Zeit ausgeführt wird.

Wird ein Cronjob etwa für täglich eingestellt und wäre eigentlich wieder dran, benötigt es einen Webseitenaufruf um den Cronjob tatsächlich auszuführen.

function wpjmbite_custom_cron_shedule( $schedules ) {
    $schedulese['every_12_hours'] = array(
        'interval' => 43200, // Every 12 hours
        'display'  => __( 'Every 12 hours' ),
    );
    return $schedules;
}
add_filter( 'cron_schedules', 'wpjmbite_custom_cron_shedule' );

//Schedule an action if it's not already scheduled
if ( !wp_next_scheduled( 'sync_wpjm_jobs_from_bite' ) ) {
    wp_schedule_event( time(), 'every_12_hours', 'sync_wpjm_jobs_from_bite_action' );
}

///Hook into that action that'll fire every six hours
add_action( 'sync_wpjm_jobs_from_bite_action', 'sync_wpjm_jobs_from_bite' );

In den ersten Zeilen bringen wir WordPress einen neuen Zeitinterval bei, in diesem Fall alle 12 Stunden was 43200 Sekunden entspricht.

Vordefinierte WordPress Intervalle:

  • hourly – Alle 60 Minuten
  • daily – Alle 24 Stunden
  • twicedaily – Alle 12 Stunden
  • weekly – Wöchentlich

Mit der Funktion wp_next_scheduled wird geprüft, ob ein neuer Cronjob Run bereits gesheduled wurde, wenn nicht, wird dieser mit wp_schedule_event im System geplant.

wp_shedule_event benötigt als ersten Parameter die aktuelle Zeit, dann den Zeitinterval und NICHT DEN Funktionsnamen sondern die Action, die bei Abarbeitung ausgeführt werden soll. Die eigentliche Funktion muss also noch an eine Action gehooked werden:

add_action( 'sync_wpjm_jobs_from_bite_action', 'sync_wpjm_jobs_from_bite' );

Powered by BetterDocs