Treci la conținut

Înlocuire WP-Cron

Queuety poate înlocui sistemul WordPress cron integrat. Când este activată, apelurile către wp_schedule_event() sunt interceptate și direcționate prin programatorul Queuety în locul mecanismului implicit WP-Cron. Evenimentele sunt procesate de lucrătorul Queuety, care execută independent de traficul site-ului.

Limitare actuală: puntea creează programările Queuety, însă lucrătorul nu are un handler pentru joburile __queuety_cron_{hook} pe care acestea le generează, așa că apelurile originale WordPress nu se execută niciodată. Fiecare job eșuează, este reîncercat cu o întârziere progresivă și, în cele din urmă, este îngropat (#9). Nu activați puntea pe un site ale cărui evenimente cron trebuie să ruleze până când problema este remediată.

Activarea înlocuirii

Apelați Queuety::replace_wp_cron() la începutul inițializării pluginului sau temei:

PHP
use Queuety\Queuety;

Queuety::replace_wp_cron();

De obicei, se apelează în fișierul principal al pluginului sau într-un hook plugins_loaded. Apelul trebuie făcut când WordPress este încărcat (pluginul trebuie să fie activ).

Ce interceptează

Puntea cron se conectează la trei filtre WordPress:

Funcția WordPress Filtru conectat Comportament
wp_schedule_event() pre_schedule_event Creează o programare Queuety cu același interval
wp_unschedule_event() pre_unschedule_event Elimină programarea Queuety corespunzătoare
wp_get_scheduled_event() pre_get_scheduled_event Returnează datele programării din Queuety

Sunt interceptate doar evenimentele recurente (cele cu o proprietate schedule precum hourly, twicedaily, daily). Evenimentele unice, programate cu wp_schedule_single_event(), nu sunt interceptate.

Cum sunt mapate evenimentele

Când un plugin apelează wp_schedule_event(), Queuety identifică numele programării prin wp_get_schedules(), creează o programare Queuety cu numele handlerului __queuety_cron_{hook} și stochează numele hookului original WordPress și argumentele în datele programării.

Comportamentul dorit este ca lucrătorul Queuety care procesează jobul programat să apeleze do_action() cu numele hookului original și argumentele, astfel încât apelurile existente WordPress să ruleze, iar Queuety să controleze temporizarea. CronBridge::process_cron_event() implementează acel apel, dar momentan nimic nu îl invocă (consultați limitarea de mai sus). Programările sunt evaluate doar de un proces wp queuety work de lungă durată, aproximativ o dată pe minut (consultați Planificare).

Determinarea intervalului

Puntea identifică mai întâi numele programărilor prin wp_get_schedules(), apoi folosește valorile implicite integrate:

Numele programării Interval
hourly 3,600 secunde
twicedaily 43,200 secunde
daily 86,400 secunde
weekly 604,800 secunde

Intervalele personalizate ale programărilor, înregistrate prin filtrul cron_schedules, sunt acceptate dacă wp_get_schedules() le returnează.

Restabilirea WP-Cron

Pentru a reveni la sistemul implicit WordPress cron:

PHP
Queuety::restore_wp_cron();

Astfel se elimină hookurile de filtrare și WordPress poate gestiona din nou evenimentele cron prin mecanismul integrat. Rețineți că DISABLE_WP_CRON este definită ca true la instalarea punții și nu poate fi anulată în timpul execuției, așadar poate fi necesar să eliminați constanta respectivă din wp-config.php sau să reporniți procesul.

Când să îl folosiți

Înlocuirea este utilă mai ales când site-ul are trafic redus, când aveți nevoie de o temporizare mai fiabilă decât cea oferită de WP-Cron sau când rulați deja lucrători Queuety și doriți ca execuția cron să facă parte din același sistem operațional. Este utilă și când observabilitatea centralizată contează, deoarece evenimentele cron apar atunci în aceleași jurnale și metrice ca celelalte activități din coadă.

Limitări

Există câteva constrângeri importante. Este necesar un lucrător Queuety activ, altfel evenimentele programate nu vor rula niciodată. Sunt interceptate doar programările recurente; evenimentele unice create cu wp_schedule_single_event() rămân în afara punții. replace_wp_cron() definește și DISABLE_WP_CRON pentru restul procesului PHP curent, așadar restore_wp_cron() elimină hookurile, dar nu poate anula definiția constantei. În cele din urmă, puntea funcționează doar când WordPress este încărcat, deoarece depinde de filtrele WordPress și de do_action().

Exemplu: configurare completă

PHP
use Queuety\Queuety;

// In your plugin's main file.
add_action( 'plugins_loaded', function () {
    Queuety::replace_wp_cron();
} );

Nu este nevoie să apelați Queuety::init() aici: pluginul Queuety activ își construiește conexiunea din datele de autentificare ale bazei de date WordPress și se inițializează la plugins_loaded. replace_wp_cron() doar instalează filtrele, deci nu depinde de finalizarea acestui pas în prealabil.

După aceea, evenimentele recurente pe care pluginurile le înregistrează cu wp_schedule_event() sunt stocate ca programări Queuety. Până la remedierea #9, apelurile lor de revenire nu se execută.