WP-Cron asendus
Queuety saab asendada sisseehitatud WordPress cron süsteemi. Kui see on lubatud, püütakse wp_schedule_event() väljakutsed kinni ja suunatakse vaikemehhanismi WP-Cron asemel ümber Queuety ajastajasse. Sündmused on mõeldud töötlemiseks Queuety töötleja poolt, mis käivitab need saidi liiklusest sõltumatult.
Praegune piirang: sild loob Queuety ajastused, kuid töötlejal puudub nende loodud
__queuety_cron_{hook}tööde käsitleja, mistõttu algseid WordPress tagasikutseid ei käivitata kunagi. Iga töö ebaõnnestub, seda proovitakse pärast ooteaega uuesti ja lõpuks jäetakse ootele (#9). Ärge lubage silda saidil, kus cron sündmused peavad käivituma, kuni see probleem pole lahendatud.
Asenduse lubamine
Kutsuge Queuety::replace_wp_cron() varakult välja plugina või teema lähtestamise ajal:
use Queuety\Queuety;
Queuety::replace_wp_cron();
Tavaliselt kutsutakse seda välja plugina põhifailis või plugins_loaded konksus. See tuleb välja kutsuda siis, kui WordPress on laaditud (plugin peab olema aktiivne).
Mida see kinni püüab
cron sild haagib end kolme WordPress filtri külge:
| WordPress funktsioon | Haagitud filter | Toimimine |
|---|---|---|
wp_schedule_event() |
pre_schedule_event |
Loob sama intervalliga ajastuse Queuety |
wp_unschedule_event() |
pre_unschedule_event |
Eemaldab vastava ajastuse Queuety |
wp_get_scheduled_event() |
pre_get_scheduled_event |
Tagastab ajastuse andmed allikast Queuety |
Kinni püütakse ainult korduvad sündmused (need, millel on omadus schedule, näiteks hourly, twicedaily, daily). Meetodiga wp_schedule_single_event() ajastatud ühekordsed sündmused jäävad kinni püüdmata.
Sündmuste kaardistamine
Kui plugin kutsub välja wp_schedule_event(), lahendab Queuety ajastuse nime wp_get_schedules() kaudu, loob Queuety ajastuse käsitleja nimega __queuety_cron_{hook} ning salvestab ajastuse andmekoormasse algse WordPress konksu nime ja argumendid.
Eeldatavasti kutsub Queuety töötleja ajastatud tööd töödeldes välja do_action() algse konksu nime ja argumentidega, et olemasolevad WordPress tagasikutsed käivituksid ja Queuety määraks ajastuse. CronBridge::process_cron_event() rakendab selle väljakutse, kuid miski ei käivita seda veel (vt ülaltoodud piirangut). Ajastusi hindab ka ainult pikalt töötav wp queuety work protsess, umbes kord minutis (vt Ajastamine).
Intervalli määramine
Sild lahendab ajastuse nimed kõigepealt läbi wp_get_schedules() ja kasutab seejärel sisseehitatud vaikeväärtusi:
| Ajastuse nimi | Intervall |
|---|---|
hourly |
3,600 sekundit |
twicedaily |
43,200 sekundit |
daily |
86,400 sekundit |
weekly |
604,800 sekundit |
Filtri cron_schedules kaudu registreeritud kohandatud ajastusintervallid on toetatud, kui wp_get_schedules() need tagastab.
WP-Cron taastamine
Vaikimisi WordPress cron süsteemi taastamiseks tehke järgmist:
Queuety::restore_wp_cron();
See eemaldab filtrikonksud ja võimaldab WordPress-l taas hallata cron sündmusi sisseehitatud mehhanismi abil. Arvestage, et silla installimisel määratakse DISABLE_WP_CRON väärtuseks true ja seda ei saa käitusajal määratlemata jätta, seega peate võib-olla selle konstandi failist wp-config.php eemaldama või protsessi taaskäivitama.
Millal seda kasutada
Asendus on kõige kasulikum väikese liiklusega saidil, kui vajate usaldusväärsemat ajastust, kui WP-Cron võimaldab, või kui kasutate juba Queuety töötlejaid ning soovite, et cron käivitamine toimuks samas operatsioonisüsteemis. See aitab ka siis, kui keskne jälgitavus on oluline, sest cron sündmused kajastuvad siis samades logides ja mõõdikutes nagu muu järjekorratöö.
Piirangud
Sellega kaasnevad mõned olulised piirangud. Ajastatud sündmuste käivitamiseks peab töötama aktiivne Queuety töötleja. Kinni püütakse ainult korduvad ajastused; meetodiga wp_schedule_single_event() loodud ühekordsed sündmused jäävad sillast välja. replace_wp_cron() määratleb ka ülejäänud praeguse PHP protsessi ajaks DISABLE_WP_CRON, seega eemaldab restore_wp_cron() konksud, kuid ei saa konstanti määratlemata jätta. Lõpuks töötab sild ainult siis, kui WordPress on laaditud, sest see sõltub WordPress filtritest ja do_action()-st.
Näide: täielik seadistus
use Queuety\Queuety;
// In your plugin's main file.
add_action( 'plugins_loaded', function () {
Queuety::replace_wp_cron();
} );
Siin pole vaja välja kutsuda Queuety::init(): aktiivne Queuety plugin loob oma ühenduse WordPress andmebaasi mandaatide põhjal ja lähtestab end plugins_loaded ajal. replace_wp_cron() paigaldab ainult filtrid, seega ei sõltu see sellest, kas nimetatu on juba toimunud.
Seejärel salvestatakse pluginate wp_schedule_event() abil registreeritud korduvad sündmused ajastustena Queuety. Kuni #9 pole parandatud, nende tagasikutseid ei käivitata.