Zamenjava WP-Cron
Queuety lahko nadomesti vgrajeni sistem WordPress cron. Ko je omogočen, prestreže klice wp_schedule_event() in jih preusmeri prek razporejevalnika za Queuety namesto prek privzetega mehanizma WP-Cron. Dogodke naj bi obdeloval delavec Queuety, ki omogoča izvajanje neodvisno od prometa na spletnem mestu.
Trenutna omejitev: most ustvari razporede Queuety, vendar delavec nima obravnavalnika za opravila
__queuety_cron_{hook}, ki jih ti ustvarijo, zato se izvorni povratni klici WordPress nikoli ne izvedejo. Vsako opravilo se konča z napako, se znova poskusi po zakasnitvi in je nazadnje skrito (#9). Mostu ne omogočite na spletnem mestu, kjer se morajo izvajati dogodki cron, dokler ta težava ni odpravljena.
Omogočanje zamenjave
Pokličite Queuety::replace_wp_cron() zgodaj med inicializacijo vtičnika ali teme:
use Queuety\Queuety;
Queuety::replace_wp_cron();
To se običajno pokliče v glavni datoteki vtičnika ali v kavlju plugins_loaded. Poklicati ga je treba, ko je naložen WordPress (vtičnik mora biti aktiven).
Kaj prestreže
Most cron se priklopi na tri filtre WordPress:
| Funkcija WordPress | Priklopljeni filter | Delovanje |
|---|---|---|
wp_schedule_event() |
pre_schedule_event |
Ustvari razpored Queuety z enakim intervalom |
wp_unschedule_event() |
pre_unschedule_event |
Odstrani ustrezni razpored Queuety |
wp_get_scheduled_event() |
pre_get_scheduled_event |
Vrne podatke razporeda iz Queuety |
Prestrezajo se samo ponavljajoči se dogodki (tisti, ki imajo lastnost schedule, kot so hourly, twicedaily, daily). Enkratni dogodki, načrtovani z wp_schedule_single_event(), se ne prestrezajo.
Kako so dogodki preslikani
Ko vtičnik pokliče wp_schedule_event(), Queuety razreši ime razporeda prek wp_get_schedules(), ustvari razpored Queuety z imenom obravnavalnika __queuety_cron_{hook} ter v vsebino razporeda shrani ime izvornega kavlja WordPress in argumente.
Predvideno je, da delavec Queuety, ki obdeluje načrtovano opravilo, pokliče do_action() z izvornim imenom kavlja in argumenti, da se izvedejo obstoječi povratni klici WordPress, časovno usklajevanje pa vodi Queuety. CronBridge::process_cron_event() izvede ta klic, vendar ga za zdaj nič ne sproži (glejte zgornjo omejitev). Razporede ocenjuje samo dolgotrajno delujoči proces wp queuety work, približno enkrat na minuto (glejte Razporejanje).
Razreševanje intervala
Most najprej razreši imena razporedov prek wp_get_schedules(), nato pa uporabi vgrajene privzete vrednosti:
| Ime razporeda | Interval |
|---|---|
hourly |
3,600 sekund |
twicedaily |
43,200 sekund |
daily |
86,400 sekund |
weekly |
604,800 sekund |
Podprti so tudi intervali po meri, registrirani prek filtra cron_schedules, če jih vrne wp_get_schedules().
Obnovitev WP-Cron
Za vrnitev na privzeti sistem WordPress cron:
Queuety::restore_wp_cron();
S tem odstranite kavlje filtrov in omogočite, da WordPress znova obravnava dogodke cron z vgrajenim mehanizmom. Upoštevajte, da je ob namestitvi mostu DISABLE_WP_CRON definirano kot true in te definicije med izvajanjem ni mogoče odstraniti, zato boste morda morali to konstanto odstraniti iz wp-config.php ali znova zagnati proces.
Kdaj jo uporabiti
Zamenjava je najbolj uporabna, ko je na vašem spletnem mestu malo prometa, ko potrebujete zanesljivejše časovno usklajevanje, kot ga omogoča WP-Cron, ali ko že uporabljate delavce Queuety in želite izvajanje cron vključiti v isti operativni sistem. Pomaga tudi, kadar je pomemben centraliziran nadzor, saj se dogodki cron prikažejo v istih dnevnikih in metrikah kot druga opravila v čakalni vrsti.
Omejitve
Upoštevati je treba nekaj pomembnih omejitev. Potreben je aktiven delavec Queuety, sicer se načrtovani dogodki ne bodo nikoli izvedli. Prestrezajo se samo ponavljajoči se razporedi; enkratni dogodki, ustvarjeni z wp_schedule_single_event(), ostanejo zunaj mostu. replace_wp_cron() določi tudi DISABLE_WP_CRON za preostanek trenutnega procesa PHP, zato restore_wp_cron() odstrani kavlje, ne more pa odstraniti definicije konstante. Nazadnje, most deluje samo, ko je naložen WordPress, saj je odvisen od filtrov WordPress in do_action().
Primer: celotna nastavitev
use Queuety\Queuety;
// In your plugin's main file.
add_action( 'plugins_loaded', function () {
Queuety::replace_wp_cron();
} );
Tukaj ni treba poklicati Queuety::init(): aktivni vtičnik Queuety vzpostavi povezavo s poverilnicami zbirke podatkov WordPress in se inicializira ob plugins_loaded. replace_wp_cron() namesti samo filtre, zato ni odvisen od tega, da se je to zgodilo prej.
Po tem se ponavljajoči se dogodki, ki jih vtičniki registrirajo z wp_schedule_event(), shranijo kot razporedi Queuety. Dokler ni odpravljena težava #9, se njihovi povratni klici ne izvajajo.