WP-Cron helyettesítése
A Queuety lecserélheti a beépített WordPress cron rendszert. Ha engedélyezve van, a wp_schedule_event() hívásokat elfogja, és az alapértelmezett WP-Cron mechanizmus helyett a Queuety ütemezőjéhez irányítja. Az eseményeket a Queuety worker dolgozza fel, így a végrehajtás nincs a webhely forgalmához kötve.
Jelenlegi korlátozás: a híd létrehozza a Queuety ütemezéseket, de a worker nem rendelkezik kezelővel az általuk létrehozott
__queuety_cron_{hook}feladatokhoz, ezért az eredeti WordPress visszahívások soha nem futnak le. Minden feladat sikertelen lesz, késleltetett újrapróbálkozás következik, végül pedig a feladat a félretett feladatok közé kerül (#9). Ne engedélyezze a hidat olyan webhelyen, ahol a cron eseményeknek le kell futniuk, amíg ezt ki nem javítják.
A helyettesítő bekapcsolása
Hívja meg a Queuety::replace_wp_cron() függvényt korán a bővítménye vagy sablonja inicializálásakor:
use Queuety\Queuety;
Queuety::replace_wp_cron();
Ezt általában a bővítmény fő fájljából vagy egy plugins_loaded hookban hívják meg. Akkor kell meghívni, amikor a WordPress már betöltődött (a bővítménynek aktívnak kell lennie).
Mit fog el
A cron híd három WordPress szűrőbe kapcsolódik be:
| WordPress függvény | Bekapcsolt szűrő | Működés |
|---|---|---|
wp_schedule_event() |
pre_schedule_event |
Azonos időközű Queuety ütemezést hoz létre |
wp_unschedule_event() |
pre_unschedule_event |
Eltávolítja a megfelelő Queuety ütemezést |
wp_get_scheduled_event() |
pre_get_scheduled_event |
Ütemezési adatokat ad vissza a Queuety rendszerből |
Csak az ismétlődő eseményeket kapja el (azokat, amelyeknek van schedule tulajdonságuk, például hourly, twicedaily vagy daily). A wp_schedule_single_event() segítségével ütemezett, egyszeri eseményeket nem kapja el.
Az események hozzárendelése
Amikor egy bővítmény meghívja a wp_schedule_event() függvényt, a Queuety a wp_get_schedules() segítségével feloldja az ütemezés nevét, létrehoz egy Queuety ütemezést a __queuety_cron_{hook} kezelőnévvel, és az ütemezés adataiban tárolja az eredeti WordPress hook nevét és argumentumait.
Az a cél, hogy az ütemezett feladatot feldolgozó Queuety worker a do_action() függvényt meghívja az eredeti hook nevével és argumentumaival, így a meglévő WordPress visszahívások lefutnak, az időzítést pedig a Queuety vezérli. A CronBridge::process_cron_event() végrehajtja ezt a hívást, de egyelőre semmi sem hívja meg (lásd a fenti korlátozást). Az ütemezéseket csak egy hosszú ideig futó wp queuety work folyamat értékeli ki, körülbelül percenként egyszer (lásd az Ütemezés oldalt).
Az időköz meghatározása
A híd először az wp_get_schedules() segítségével oldja fel az ütemezésneveket, majd a beépített alapértékeket használja:
| Ütemezés neve | Időköz |
|---|---|
hourly |
3,600 másodperc |
twicedaily |
43,200 másodperc |
daily |
86,400 másodperc |
weekly |
604,800 másodperc |
A cron_schedules szűrőn keresztül regisztrált egyéni ütemezési időközök is támogatottak, ha a wp_get_schedules() visszaadja őket.
A WP-Cron visszaállítása
Az alapértelmezett WordPress cron rendszerre való visszatéréshez:
Queuety::restore_wp_cron();
Ezzel eltávolítja a szűrőhookokat, és a WordPress ismét a beépített mechanizmusával kezelheti a cron eseményeket. Vegye figyelembe, hogy a híd telepítésekor a DISABLE_WP_CRON értéke true lesz, és futás közben nem törölhető a definíciója, ezért előfordulhat, hogy el kell távolítania ezt az állandót a wp-config.php fájlból, vagy újra kell indítania a folyamatot.
Mikor használja
A helyettesítő akkor a leghasznosabb, ha kevés a forgalom a webhelyén, ha a WP-Cron által biztosítottnál megbízhatóbb időzítésre van szüksége, vagy ha már futtat Queuety workereket, és a cron végrehajtást ugyanabba az üzemeltetési rendszerbe szeretné illeszteni. Akkor is hasznos, ha fontos a központosított megfigyelhetőség, mert így a cron események ugyanazokban a naplókban és mérőszámokban jelennek meg, mint a többi sorfeladat.
Korlátozások
Van néhány fontos korlátozás. Szükség van egy aktív Queuety workerre, különben az ütemezett események soha nem futnak le. Csak az ismétlődő ütemezések kerülnek elfogásra; a wp_schedule_single_event() segítségével létrehozott egyszeri események továbbra is kívül maradnak a hídon. A replace_wp_cron() a jelenlegi PHP folyamat hátralévő részére is meghatározza a DISABLE_WP_CRON értékét, ezért a restore_wp_cron() eltávolítja a hookokat, de az állandó definícióját nem tudja törölni. Végül a híd csak akkor működik, ha a WordPress be van töltve, mert a WordPress szűrőkre és a do_action() elemre támaszkodik.
Példa: teljes beállítás
use Queuety\Queuety;
// In your plugin's main file.
add_action( 'plugins_loaded', function () {
Queuety::replace_wp_cron();
} );
Itt nem kell meghívni a Queuety::init() függvényt: az aktív Queuety bővítmény a WordPress adatbázis hitelesítő adataiból hozza létre a kapcsolatot, és a plugins_loaded eseménynél inicializálja magát. A replace_wp_cron() csak telepíti a szűrőket, ezért nem függ attól, hogy ez előbb megtörtént-e.
Ezután a bővítmények által a wp_schedule_event() segítségével regisztrált ismétlődő események Queuety ütemezésként tárolódnak. Amíg a #9 nincs kijavítva, a hozzájuk tartozó visszahívások nem futnak le.