Możesz utworzyć nowy harmonogram według cron_schedules:
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');
Teraz możesz zaplanować swoją funkcję:
wp_schedule_event(time(), '5min', 'my_schedule_hook', $args);
Aby zaplanować tylko raz, zawiń go w funkcję i sprawdź przed uruchomieniem:
$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');
}
Zwróć uwagę na parametr $ args! Brak określenia parametru $ args w wp_next_scheduled, ale posiadanie $ args dla wp_schedule_event, spowoduje zaplanowanie prawie nieskończonej liczby tego samego zdarzenia (zamiast tylko jednego).
Na koniec utwórz rzeczywistą funkcję, którą chcesz uruchomić:
function my_schedule_hook(){
// codes go here
}
Myślę, że należy wspomnieć, że wp-cron sprawdza harmonogram i wykonuje zaplanowane zadania za każdym razem, gdy strona jest ładowana.
Tak więc, jeśli masz witrynę o niskim natężeniu ruchu, która ma tylko 1 gościa na godzinę, wp-cron będzie działał tylko wtedy, gdy ten użytkownik będzie przeglądał twoją stronę (raz na godzinę). Jeśli masz witrynę o dużym ruchu, odwiedzający co sekundę żądają strony, wp-cron będzie uruchamiany co sekundę, powodując dodatkowe obciążenie serwera.
Rozwiązaniem jest dezaktywacja wp-cron i uruchomienie go za pomocą prawdziwego zadania cron w przedziale czasowym najszybszego powtarzania zaplanowanego zadania wp-cron (w twoim przypadku 5 minut).
Lucas Rolff wyjaśnia problem i szczegółowo opisuje rozwiązanie.
Alternatywnie możesz skorzystać z bezpłatnej usługi innej firmy, takiej jak UptimeRobot, aby sprawdzać witrynę (i wyzwalać wp-cron) co 5 minut, jeśli nie chcesz dezaktywować wp-cron i uruchamiać go za pomocą prawdziwego zadania cron.