Pāriet uz saturu

WP-Cron aizstājējs

Queuety var aizstāt iebūvēto WordPress cron sistēmu. Kad tā ir iespējota, wp_schedule_event() izsaukumi tiek pārtverti un novirzīti uz Queuety plānotāju, nevis noklusējuma WP-Cron mehānismu. Notikumus paredzēts apstrādāt ar Queuety darbinieku, kas nodrošina izpildi neatkarīgi no vietnes datplūsmas.

Pašreizējais ierobežojums: tilts izveido Queuety grafikus, taču darbiniekam nav apstrādātāja to radītajiem __queuety_cron_{hook} darbiem, tāpēc sākotnējie WordPress atzvani nekad netiek izpildīti. Katrs darbs neizdodas, pēc gaidīšanas tiek mēģināts vēlreiz un galu galā tiek paslēpts (#9). Neiespējojiet šo tiltu vietnē, kuras cron notikumiem jādarbojas, kamēr šī problēma nav novērsta.

Aizstājēja iespējošana

Plugin vai tēmas inicializācijas sākumā izsauciet Queuety::replace_wp_cron():

PHP
use Queuety\Queuety;

Queuety::replace_wp_cron();

To parasti izsauc plugina galvenajā failā vai plugins_loaded āķī. Tas jāizsauc, kamēr ir ielādēts WordPress (pluginam jābūt aktīvam).

Ko tas pārtver

cron tilts pievieno āķus trim WordPress filtriem:

WordPress funkcija Piesaistītais filtrs Darbība
wp_schedule_event() pre_schedule_event Izveido Queuety grafiku ar tādu pašu intervālu
wp_unschedule_event() pre_unschedule_event Noņem atbilstošo Queuety grafiku
wp_get_scheduled_event() pre_get_scheduled_event Atgriež grafika datus no Queuety

Tiek pārtverti tikai periodiski notikumi (tie, kam ir rekvizīts schedule, piemēram, hourly, twicedaily, daily). Vienreizēji notikumi, kas ieplānoti ar wp_schedule_single_event(), netiek pārtverti.

Kā tiek piesaistīti notikumi

Kad spraudnis izsauc wp_schedule_event(), Queuety vispirms meklē grafika nosaukumu, izmantojot wp_get_schedules(), izveido Queuety grafiku ar apstrādātāja nosaukumu __queuety_cron_{hook} un saglabā sākotnējā WordPress āķa nosaukumu un argumentus grafika datos.

Paredzēts, ka Queuety darbinieks, apstrādājot ieplānoto darbu, izsauc do_action() ar sākotnējo āķa nosaukumu un argumentiem, lai esošie WordPress atzvani tiktu izpildīti, bet laiku noteiktu Queuety. CronBridge::process_cron_event() šo izsaukumu nodrošina, taču pagaidām nekas to neizsauc (skatiet iepriekš minēto ierobežojumu). Grafikus izvērtē tikai ilgstoši darbojošs wp queuety work process — aptuveni reizi minūtē (skatiet sadaļu Plānošana).

Intervālu noteikšana

Tilts vispirms meklē grafika nosaukumus, izmantojot wp_get_schedules(), un pēc tam izmanto iebūvētās noklusējuma vērtības:

Grafika nosaukums Intervāls
hourly 3,600 sekundes
twicedaily 43,200 sekundes
daily 86,400 sekundes
weekly 604,800 sekundes

Tiek atbalstīti pielāgoti grafiku intervāli, kas reģistrēti ar filtru cron_schedules, ja vien wp_get_schedules() tos atgriež.

WP-Cron atjaunošana

Lai atgrieztos pie noklusējuma WordPress cron sistēmas:

PHP
Queuety::restore_wp_cron();

Tiek noņemti filtru āķi, un WordPress atkal var apstrādāt cron notikumus, izmantojot iebūvēto mehānismu. Ņemiet vērā, ka, instalējot tiltu, DISABLE_WP_CRON tiek definēts kā true, un izpildes laikā šo definīciju nevar atcelt, tāpēc šo konstanti, iespējams, vajadzēs noņemt no wp-config.php vai restartēt procesu.

Kad to izmantot

Aizstājējs ir īpaši noderīgs vietnēs ar mazu datplūsmu, ja nepieciešams precīzāks izpildes laiks, nekā spēj nodrošināt WP-Cron, vai ja jau darbojas Queuety darbinieki un vēlaties cron izpildi iekļaut tajā pašā darbības vidē. Tas noder arī tad, ja svarīga ir centralizēta uzraudzība, jo cron notikumi tad parādās tajos pašos žurnālos un metrikās kā citi darbi rindā.

Ierobežojumi

Jāņem vērā daži būtiski ierobežojumi. Ir nepieciešams aktīvs Queuety darbinieks, citādi ieplānotie notikumi nekad netiks izpildīti. Tiek pārtverti tikai periodiskie grafiki; vienreizējie notikumi, kas izveidoti ar wp_schedule_single_event(), joprojām nav pieejami tiltam. replace_wp_cron() arī definē DISABLE_WP_CRON visu atlikušo pašreizējā PHP procesa darbības laiku, tāpēc restore_wp_cron() noņem āķus, bet nevar atcelt konstantes definīciju. Visbeidzot, tilts darbojas tikai tad, ja ir ielādēts WordPress, jo tas ir atkarīgs no WordPress filtriem un do_action().

Piemērs: pilna konfigurācija

PHP
use Queuety\Queuety;

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

Šeit nav jāizsauc Queuety::init(): aktīvais Queuety spraudnis izveido savienojumu, izmantojot WordPress datubāzes akreditācijas datus, un inicializējas plugins_loaded. replace_wp_cron() tikai pievieno filtrus, tāpēc tam nav nepieciešams, lai tas būtu noticis iepriekš.

Pēc tam periodiskie notikumi, ko spraudņi reģistrē ar wp_schedule_event(), tiek saglabāti kā Queuety grafiki. Kamēr nav novērsta #9 problēma, to atzvani netiks izpildīti.