WP-Cron pakeitimas
Queuety gali pakeisti integruotą WordPress cron sistemą. Ją įjungus, iškvietimai wp_schedule_event() perimami ir nukreipiami į Queuety planuoklį, o ne į numatytąjį WP-Cron mechanizmą. Įvykius apdoroja Queuety darbininkas, todėl jie vykdomi nepriklausomai nuo svetainės lankomumo.
Dabartinis apribojimas: tiltas sukuria Queuety tvarkaraščius, tačiau darbininkas neturi jų sukuriamų
__queuety_cron_{hook}užduočių apdorojimo funkcijos, todėl originalios WordPress atgalinio iškvietimo funkcijos niekada nevykdomos. Kiekviena užduotis nepavyksta, po delsos bandoma dar kartą ir galiausiai perkeliama į nepavykusių užduočių saugyklą (#9). Nejunkite tilto svetainėje, kurioje būtina vykdyti cron įvykius, kol ši problema neišspręsta.
Pakeitimo įjungimas
Iškvieskite Queuety::replace_wp_cron() anksti inicijuodami papildinį arba temą:
use Queuety\Queuety;
Queuety::replace_wp_cron();
Paprastai ši funkcija iškviečiama pagrindiniame papildinio faile arba per plugins_loaded kabliuką. Ji turi būti iškviesta, kai įkeltas WordPress (papildinys turi būti aktyvus).
Ką jis perima
cron tiltas prisijungia prie trijų WordPress filtrų:
| WordPress funkcija | Prijungtas filtras | Veikimas |
|---|---|---|
wp_schedule_event() |
pre_schedule_event |
Sukuria Queuety tvarkaraštį su tokiu pačiu intervalu |
wp_unschedule_event() |
pre_unschedule_event |
Pašalina atitinkamą Queuety tvarkaraštį |
wp_get_scheduled_event() |
pre_get_scheduled_event |
Grąžina tvarkaraščio duomenis iš Queuety |
Perimami tik pasikartojantys įvykiai (turintys savybę schedule, pavyzdžiui, hourly, twicedaily, daily). Vienkartiniai įvykiai, suplanuoti naudojant wp_schedule_single_event(), neperimami.
Kaip susiejami įvykiai
Kai papildinys iškviečia wp_schedule_event(), Queuety per wp_get_schedules() nustato tvarkaraščio pavadinimą, sukuria Queuety tvarkaraštį su apdorojimo funkcijos pavadinimu __queuety_cron_{hook} ir tvarkaraščio naudingojoje apkrovoje išsaugo originalų WordPress kabliuko pavadinimą bei argumentus.
Numatyta, kad Queuety darbininkas, apdorojantis suplanuotą užduotį, iškviečia do_action() su originaliu kabliuko pavadinimu ir argumentais, kad esamos WordPress atgalinio iškvietimo funkcijos būtų vykdomos, o laiką valdytų Queuety. CronBridge::process_cron_event() šį iškvietimą įgyvendina, bet kol kas jo niekas neatlieka (žr. anksčiau nurodytą apribojimą). Tvarkaraščius taip pat apdoroja tik ilgai veikiantis wp queuety work procesas, maždaug kartą per minutę (žr. Planavimas).
Intervalo nustatymas
Tiltas pirmiausia ieško tvarkaraščių pavadinimų per wp_get_schedules(), o tada naudoja integruotąsias numatytąsias reikšmes:
| Tvarkaraščio pavadinimas | Intervalas |
|---|---|
hourly |
3,600 sekundžių |
twicedaily |
43,200 sekundžių |
daily |
86,400 sekundžių |
weekly |
604,800 sekundžių |
Palaikomi pasirinktiniai tvarkaraščių intervalai, užregistruoti per filtrą cron_schedules, jei juos grąžina wp_get_schedules().
WP-Cron atkūrimas
Norėdami grįžti prie numatytosios WordPress cron sistemos:
Queuety::restore_wp_cron();
Taip pašalinami filtrų kabliukai ir WordPress vėl gali apdoroti cron įvykius naudodama integruotą mechanizmą. Atminkite, kad įdiegus tiltą, DISABLE_WP_CRON apibrėžiama kaip true ir vykdymo metu jos apibrėžimo panaikinti negalima, todėl gali tekti pašalinti šią konstantą iš wp-config.php arba paleisti procesą iš naujo.
Kada naudoti
Pakeitimas naudingiausias, kai svetainės lankomumas mažas, kai reikia patikimesnio vykdymo laiko nei gali užtikrinti WP-Cron arba kai jau naudojate Queuety darbininkus ir norite, kad cron vykdymas vyktų toje pačioje operacinėje sistemoje. Jis taip pat naudingas, kai svarbi centralizuota stebėsena, nes cron įvykiai tada rodomi tuose pačiuose žurnaluose ir metrikose kaip ir kitos eilės užduotys.
Apribojimai
Yra keletas svarbių apribojimų. Kad suplanuoti įvykiai būtų vykdomi, būtinas aktyvus Queuety. Perimami tik pasikartojantys tvarkaraščiai; vienkartiniai įvykiai, sukurti naudojant wp_schedule_single_event(), vis tiek nepatenka į šią sąsają. replace_wp_cron() taip pat apibrėžia DISABLE_WP_CRON likusiam dabartinio PHP proceso laikui, todėl restore_wp_cron() pašalina kabliukus, bet negali panaikinti konstantos apibrėžimo. Galiausiai ši sąsaja veikia tik įkėlus WordPress, nes ji priklauso nuo WordPress filtrų ir do_action().
Pavyzdys: visa sąranka
use Queuety\Queuety;
// In your plugin's main file.
add_action( 'plugins_loaded', function () {
Queuety::replace_wp_cron();
} );
Čia nereikia kviesti Queuety::init(): aktyvusis Queuety papildinys užmezga ryšį naudodamas WordPress duomenų bazės prisijungimo duomenis ir inicijuoja save plugins_loaded. replace_wp_cron() tik įdiegia filtrus, todėl jam nesvarbu, ar tai jau įvyko.
Po to pasikartojantys įvykiai, kuriuos papildiniai užregistruoja per wp_schedule_event(), išsaugomi kaip Queuety tvarkaraščiai. Kol nebus ištaisyta #9, jų atgalinio iškvietimo funkcijos nevykdomos.