Každý, kdo vlastní e-shop na WordPressu, se dostane do situace, kdy bude muset řešit spouštění úloh v pravidelném intervalu.
Typickým příkladem, je generování XML souboru pro Google Merchants, nebo jiné srovnávače. V souboru potřebujete mít neustále aktuální informace o zboží a skladu.
V případě, že vám někdo naprogramuje plugin, nebo jej zakoupíte, můžete se setkat s výrazem „CRON“.
Musíte však vědět, zda to je Cron, nebo WP Cron, protože se od sebe dost liší.
Rozdíly mezi Cronem a WP Cronem
Cron je naplánovaná úloha na vašem serveru, většinou se tedy nastavuje na hostingu, který máte pro web.
Nastavení cron úlohy na vašem serveru je u většiny hostingů možné v administraci, jako například u WP Hosting.cz, kde si nastavíte url adresy, jenž chcete spouštět a v jakém intervalu.
Screeny z nastavení cronu:
Jak můžete vidět, server v určených intervalech načte url adresu a díky tomu se provedou všechny funkce, které script na adrese obsahuje.
Takto je řešena aktualizace například feedů pro Heuréku u pluginu od Toret.cz.
Oproti tomu WP Cron jsou akce a funkce, jenž se provádějí při načítání WordPressu. Nezáleží na tom, zda jste v administraci, nebo na webu, pokaždé, když se web načítá, dochází ke kontrole úloh pro WP Cron.
Ty se pak zkontrolují, zda jsou aktuálně načasované a provedou se.
Znamená to, že pokud máte web s nižší návštěvností a jsou naplánovány úlohy na půlnoc, je možné, že nebude žádná návštěva a první návštěvník to ráno prostě odskáče. Web to může výrazně zbrzdit. Na druhou stranu, méně náročné úlohy, jako jsou třeba kontroly verzí pluginů, web výrazně neomezí.
Použití Cronu nebo WP Cronu je třeba promyslet, ale já osobně, pokud mohu, používám pouze cron nastavená na hostingu.
V další části článku si již budeme popisovat pouze WP Cron, takže pro zjednodušení používám název Cron i pro úlohy WP Cronu.
Plánování události ve WP Cronu
Chování WordPress Cronu se dá rozdělit do dvou typů:
- jednorázové úkoly – úloha se provede a pokud ji znovu nenaplánujete, již se nespustí
- pravidelně opakované úkoly – spouští se pravidelně, podle definovaných intervalů
Naplánování opakované úlohy
Vytvoření naplánované úlohy vyžaduje vytvoření vlastní akce, která se zaregistruje do WordPress Cronu a naplánuje interval opakování. Jakmile je akce přidána do Cronu a ten je spuštěn, naplánovaná úloha se provede.
V následujícím příkladu naplánujeme WP Cron úlohu, který se spustí jednou za den a smaže všechny selhané objednávky.
Upozornění: pokud kód vkládáte do pluginu a ne do souboru functions.php, je třeba část kódu s wp_next_scheduled funkcí, zavěsit do init akce.
Naplánování jednorázové úlohy
Pomocí single eventu můžeme provést naplánovanou jednorázovou akci. Příklad si ukážeme na publikování skrytého článku, přesně po měsíci. Pro naplánování použijeme funkci wp_schedule_single_event
Konstanty pro plánování
MINUTE_IN_SECONDS
= 60 (seconds)HOUR_IN_SECONDS
= 60 * MINUTE_IN_SECONDSDAY_IN_SECONDS
= 24 * HOUR_IN_SECONDSWEEK_IN_SECONDS
= 7 * DAY_IN_SECONDSYEAR_IN_SECONDS
= 365 * DAY_IN_SECONDS
Kontrola, plánování a úprava cron úloh
Přestože můžete stejného výsledku dosáhnout pomocí funkcí WordPressu a vlastního kódu, existuje několik užitečných pluginů, které vám se správou pomohou.
WP Crontrol
Plugin do záložky Nástroje po instalaci přidá položku Cron events.
V té můžete najít výpis všech naplánovaných eventů, jejich argumenty a callbacky. Každou úlohu můžte upravovat, nebo ručně spustit.
Advanced Cron Manager
Podobně jako předchozí plugin, přidává novou položku do Nástrojů. V Cron manageru můžete opět vidět seznam všech eventů. Můžete je spuštět, pozastavit, nebo smazat. Plugin má i hromadné akce, ale není možné úlohy upravovat.
Cron Logger
Malý a jednoduchý plugin, který nedělá nic jiného, než že loguje provádění eventů. V případě že potřebujete diagnostikovat provádění WP Cronu a nepotřebujete upravovat jejich nastavení, můžete jej bez problémů použít.
Log najdete opět v Nástrojích.
Závěr
Osobně si myslím, že pro větší a komplikovanější weby a e-shopy je používání WP Cronu nevhodné. Především kvůli většímu počtu dat v dadatabázi, zatížení webu a tak dále.
Pokud víte, že je třeba dělat náročnější a častější úlohy na pozadí, je lepší využít cron serveru.
V případě, že potřebujete pomoci s provozem a správou vašeho webu, napište mi na musilda@musilda.cz a pokud vám nepomohu přímo já, určitě vám dám doporučení.
Upozornění: článek obsahuje affiliate odkaz.
Fajn článok, najmä pre programátorov. Niečo podobné som napísal aj ja (https://robime.it/wp-cron-dobry-sluha-ale-zly-pan/), skôr pre bežných užívateľov.
Pingback: Action scheduler - Musilda.cz
Bolo by možne takýmto CRONom spustiť aj funkciu, že zmaže na webe produkt ktorý je 6 mesiacov už vypredaný.
Dobrý den,
samozřejmě, stačí napsat odpovídající funkci a nechat ji spouštět wp cronem, nebo cronem.