Pravidelné úlohy ve WP jsou užitečným nástrojem, pokud potřebujete volat nějakou funkci pravidelně (ale ne při každém spuštění stránky). Např. kontrolu nezaplacených objednávek (custom funkce), kontrola aktualizací (řeší WP sám) a cokoli jiného pravidelného.
Pravidelné úlohy ve WP využívají WP cron, který je ovšem závislý na aktivitě webu (tj. je potřeba počítat s tím, že se nemusí spustit 100% přesně, protože je závislý na návštěvnosti webu). Pokud byste chtěli tento cron volat opravdu pravidelně, musíte ho volat ze serveru (návod máte tady).
Jak naplánovat vlastní pravidelné úlohy ve WP?
Všechen kód můžete mít ve vlastním pluginu nebo jej dát do Child theme (functions.php), případně do snippetu.
1. Vytvoření volané funkce
Vaše funkce, která se bude v pravidelném intervalu volat, může dělat témeř cokoli, na co si vzpomenete. A bude ještě potřebovat akci, která ji zavolá:
function my_custom_function_to_be_called() {
error_log('Some cool stuff happens here!');
}
add_action('my_custom_function_action', 'my_custom_function_to_be_called');
2. Naplánování funkce
WP má definované možnosti spuštění v intervalech:
- hourly,
- twicedaily,
- daily,
- vlastní libovolný (vizte bod 5).
Samotné naplánování pravidelného volání vaší funkce pak vypadá takto:
function my_custom_schedule_event() {
if (!wp_next_scheduled('my_custom_function_action')) {
wp_schedule_event(time(), 'hourly', 'my_custom_function_action');
error_log("my_custom_function_action scheduled");
}
}
add_action('wp', 'my_custom_schedule_event');
Princip je následující:
- máme funkci
my_custom_function_to_be_called, - tuto funkci volá akce
my_custom_function_action, - a právě funkce
my_custom_schedule_eventpak zařídí, že se tato akce zařadí na seznam pravidelných úloh- pokud už naplánována je, tak ji znovu nenaplánuje,
- pokud není, naplánuje ji.
- o samotné volání funkce se pak stará WP cron, který akci
my_custom_function_actionbude pravidelně volat ve zvoleném intervalu.
Pozn: Jakmile už je událost naplánována, můžete funkci my_custom_schedule_event i její volání zakomentovat (tj. kód z bodu 2). Událost už je na seznamu naplánovaných a není třeba ji zkoušet plánovat znovu při každém volání jakékoli stránky webu.
3. Kontrola spuštěných údálostí
Na kontrolu událostí je skvělý plugin WP Crontrol (ale i kterýkoli jiný), který vám plánované události jednoduše vypíše. Díky tomu víte:
- jaká akce se pravidelně volá,
- jakou funkci volá,
- jak často ji volá a kdy to bude příště.

Další možnosti plánovaných úloh
4. Zrušení naplánované události
Pokud chcete událost zrušit, pak stačí jednou zavolat následující kód, který ji smaže ze seznamu plánovaných úloh (a pak ho zase smazat):
function my_custom_unschedule_event() {
$timestamp = wp_next_scheduled('my_custom_function_action');
if ($timestamp) {
wp_unschedule_event($timestamp, 'my_custom_function_action');
}
}
add_action('wp', 'my_custom_unschedule_event');
5. Vlastní interval volání
Někdy se hodí nadefinovat vlastní interval volání, což je samozřejmě také možné:
function my_custom_cron_interval($schedules) {
$schedules['every_five_minutes'] = array(
'interval' => 300, //in seconds
'display' => __('Každých 5 minut')
);
return $schedules;
}
add_filter('cron_schedules', 'my_custom_cron_interval');
Naplánování z bodu 2) se pak změní na:
wp_schedule_event(time(), 'every_five_minutes', 'my_custom_cron_hook');
Můžete si případně vypsat už existující intervaly, které na webu jsou, přepoužít je a nevytvářet tak další. (kód pak dejte z webu zase pryč).
function debug_cron_intervals($schedules) {
error_log(print_r($schedules, true)); // Zapisuje všechny intervaly do logu
return $schedules;
}
add_filter('cron_schedules', 'debug_cron_intervals');

