Sie können über cron_schedules neue Fahrplanzeiten anlegen:
function my_cron_schedules($schedules){
if(!isset($schedules["5min"])){
$schedules["5min"] = array(
'interval' => 5*60,
'display' => __('Once every 5 minutes'));
}
if(!isset($schedules["30min"])){
$schedules["30min"] = array(
'interval' => 30*60,
'display' => __('Once every 30 minutes'));
}
return $schedules;
}
add_filter('cron_schedules','my_cron_schedules');
Jetzt können Sie Ihre Funktion einplanen:
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
Um es nur einmal zu planen, schließen Sie es in eine Funktion ein und prüfen Sie, bevor Sie es ausführen:
$args = array(false);
function schedule_my_cron(){
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
}
if(!wp_next_scheduled('my_schedule_hook',$args)){
add_action('init', 'schedule_my_cron');
}
Beachten Sie den Parameter $ args! Wenn Sie den Parameter $ args in wp_next_scheduled nicht angeben, aber $ args für wp_schedule_event haben, wird eine nahezu unendliche Anzahl desselben Ereignisses (statt nur eines) geplant.
Erstellen Sie abschließend die eigentliche Funktion, die Sie ausführen möchten:
function my_schedule_hook(){
// codes go here
}
Ich denke, es ist wichtig zu erwähnen, dass wp-cron bei jedem Laden einer Seite den Zeitplan überprüft und fällige geplante Jobs ausführt.
Wenn Sie also eine verkehrsarme Website haben, die nur 1 Besucher pro Stunde hat, wird wp-cron nur ausgeführt, wenn dieser Besucher Ihre Website durchsucht (einmal pro Stunde). Wenn Ihre Website mit vielen Besuchern pro Sekunde eine Seite anfordert, wird wp-cron jede Sekunde ausgelöst, wodurch der Server zusätzlich belastet wird.
Die Lösung besteht darin, wp-cron zu deaktivieren und über einen echten cron-Job in dem Zeitintervall auszulösen, in dem Sie den geplanten wp-cron-Job am schnellsten wiederholen (in Ihrem Fall 5 Minuten).
Lucas Rolff erklärt das Problem und gibt die Lösung im Detail.
Alternativ können Sie einen kostenlosen Drittanbieter-Service wie UptimeRobot verwenden , um Ihre Site alle 5 Minuten abzufragen (und wp-cron auszulösen), wenn Sie wp-cron nicht deaktivieren und es über einen echten cron-Job auslösen möchten.