Ugrás a tartalomhoz

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:

PHP
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:

PHP
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

PHP
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.