
Favikona je ikona web stranice vidljiva na tabu preglednika ili na početnom zaslonu mobilnih uređaja. Saznajte kako ih kreirati.
Cron je standardni UNIX program koji služi za zakazivanje izvršavanja poslova u određeno vrijeme. Zadatak je poznat kao cron posao (eng. cron job). Cilj je automatizirati zadatke koji se ponavljaju radi bolje produktivnosti, uštede vremena, manje briga i glavobolja te izbjegavanja nepotrebnog ručnog posla. Iako se zove kao standardni program, WordPressov Cron posao malo se razlikuje pa da vidimo kako on funkcionira. Napravit ćemo primjer izrade zadatke i isplanirati izvršenje zadataka.
Neki primjera gdje se WP-Cron koristi u čistom WordPressu:
Ovisno postoje li neki instalirani dodaci, popularni WP-Cron poslovi su još:
Možemo kreirati zadatak kakav god poželimo. Primjerice, podesiti da nam se pošalje poruka na e-mail nakon što sustav odradi neke provjere.
Ponekad smo primijetili da postoje kreirani poslovi za dodatke (pluginove) koji više ni ne postoje jer ne počiste za sobom nakon što se obrišu. Još jedan razlog zašto je dobro čim manje dodataka instalirati na WordPress stranice i koristiti samo dodatke provjerene kvalitete, kako ne bi zagušili sustav nepotrebnim radnjama.
WP-Cron poslovi izvršavaju se u pozadini i šalju naredbu na server hostinga web stranice na kojem se nalaze da izvrši zadatak u određeno vrijeme ili u određenim vremenskim intervalima. Da bi cron započeo sa zacrtanim poslom, netko treba posjetiti web stranicu. Dakle, prvo trebate imati barem neke posjetitelje na stranici. Usput, znate li da možemo optimizirati web stranice za tražilice kako bi bolje rangirale i privukle posjetu? 🙂
Jer WP-Cron se izvrši tek kada se stranica učita i kada se programski kodovi WordPressa pokrenu. Zbog tog razloga nije baš posve precizan ali za uobičajene radnje nam je sasvim dovoljno. Za slučaj kad nam je potrebno vrlo precizno postavljanje vremena morali bi se odmaknuti od WordPress načina i koristiti izvorni cron job koji podesimo na razini servera.
WP-Cron zatim provjerava ima li nekih planiranih poslova koje mora izvršiti. Ako je upravo vrijeme za njihovo izvršenje ili ako primijeti da je to vrijeme već prošlo i trebao je poslove već obaviti, sustav tada pokreće njihovo izvršavanje.
WP-Cron koristi dvije datoteke za rad. Prva je cron.php (nalazi se unutar wp-includes direktorija) koja sadrži sve funkcije potrebne za zakazivanje posla, druga je wp-cron.php (u glavnom direktoriju WordPressa) i ona je odgovorna za njihovo izvršenje.
add_filter('cron_schedules', 'ms_custom_cron_schedule'); function ms_custom_cron_schedule($schedules) { $schedules['ms_five_minutes'] = array( 'interval' => 300, // 5 minuta (5 x 60 = 300) 'display' => 'Five minutes', ); return $schedules; }
wp_schedule_event
funkcije unutar teme.Funkcija prima tri parametra:
Mi ćemo zakazati termin za podne i postaviti da se izvršava svakih 5 minuta koristeći prethodno registrirani interval.
if (!wp_next_scheduled('ms_test_cron_job')) { wp_schedule_event(strtotime('12:00:00'), 'ms_five_minutes', 'ms_test_cron_job'); }
add_action('ms_test_cron_job', 'ms_test_cron_job'); function ms_test_cron_job() { $dt = new DateTime(); error_log('Cron job je izvršen - ' . $dt->format('Y-m-d H:i:s')); }
Ako u wp-config.php
imamo postavljenu konstantu define('WP_DEBUG', true);
tada će se obavijest zapisati u datoteku /wp-content/debug.log
. U suprotnome, zapisat će se u error_log datoteku koja se nalazi u glavnom (root) direktoriju WordPressa.
Dodatak nam dosta pojednostavljuje rad s cron zadacima.
Pod Tools > Cron Events > Cron Schedules
imamo pregled cijelog popis registriranih intervala, pod kojih imenom su registrirani i koliko često se izvršavaju. Neki primjeri su:
Ovo nije bila iscrpna lista ali dovoljno je za početak. Za detalje sami pogledajte kompletan popis.
Pod Tools > Cron Events > Cron Schedules
dolje za dodavanje imamo 3 polja za input.
Mi ćemo, kao i u primjeru bez instaliranog dodatka, kreirati interval od 5 minuta s idućim parametrima:
ms_five_minutes 300 Five minutes
Pod Tools > Cron Events > Cron Events
imamo uvid u sve registrirane zadatke. Vidimo funkciju koju okidaju, postoje li neki argumenti koji će se proslijediti funkciji, točan datum idućeg izvršavanja, ispod odmah i relativno vrijeme do tog datuma, te koliko često se interval izvršava.
Pod Tools > Cron Events > Cron Events
klikom na “Add Cron Event” možemo kreirati novi posao. Potrebno je navesti naziv udice (“Hook name”), argumente koje želimo proslijediti (opcionalno), datum prvog izvršavanja te koliko često se interval ponavlja.
Kreirat ćemo posao s ovim parametrima:
ms_test_cron_job {prazno} Now Five minutes
Time smo kreirali akciju nazivom ms_test_cron_job
koju ćemo odmah pozvati tako da na stranici Tools > Cron Events > Cron Events
pokrenemo (Run Now) našu akciju. Nakon prvo izvršenja, posao će se izvršavati svakih pet minuta beskonačno puta ali pod uvjetom da netko posjeti web stranicu kako bi WordPress mogao pokrenuti provjeru i okinuti zadane poslove prema potrebi.
Da bismo mogli imati koristi od kreirane akcije, trebamo joj dodijeliti funkciju. Naredni primjer pokazuje nam kako da akciji dodijelimo funkciju koja će potom u error log ispisati poruku i datum izvršenja poruke.
add_action('ms_test_cron_job', 'ms_test_cron_job'); function ms_test_cron_job() { $dt = new DateTime(); error_log('Cron job je izvršen - ' . $dt->format('Y-m-d H:i:s')); }
Kada više ne trebamo izvršavanje funkcije, posao samo obrišemo pod Tools > Cron Events > Cron Events
.
Kada više ne želimo koristiti dodatak, samo ga deaktiviramo i obrišemo. Ako smo koristili standardne vrijednosti za intervale (daily, hourly…), Cron poslovi koje smo kreirali nastavit će se izvršavati i nakon što je dodatak obrisan.
Vidjeli smo primjer zakazivanja cron posla što nam dugoročno može uštedjeti vrijeme. Pokazali smo dva načina, jedan pomoću čistog kôda i drugi pomoću instaliranog dodatka koji nam pruži pregledan uvid u sve registrirane cron poslove i podešene intervale. Za uvid u pregled svih poslova nije ni nužno koristiti dodatak, možemo to vidjeti preko WP CLI koristeći naredbu wp cron event list
. Jedino bi tada trebali imati SSH pristup web stranicama.