Ersättning av WP-Cron
Queuety kan ersätta det inbyggda systemet WordPress cron. När funktionen är aktiverad fångas anrop till wp_schedule_event() upp och skickas via schemaläggaren i Queuety i stället för standardmekanismen WP-Cron. Händelserna är avsedda att behandlas av arbetaren Queuety, som kör oberoende av webbplatstrafiken.
Aktuell begränsning: bryggan skapar Queuety-scheman, men arbetaren saknar en hanterare för de
__queuety_cron_{hook}-jobb som de genererar, så de ursprungliga WordPress-återanropen körs aldrig. Varje jobb misslyckas, försöks igen med exponentiell fördröjning och begravs till slut (#9). Aktivera inte bryggan på en webbplats där cron-händelser måste köras förrän detta är åtgärdat.
Aktivera ersättningen
Anropa Queuety::replace_wp_cron() tidigt under initieringen av ditt plugin eller tema:
use Queuety\Queuety;
Queuety::replace_wp_cron();
Detta anropas vanligtvis i pluginets huvudfil eller i en plugins_loaded-hook. Det måste anropas när WordPress har laddats (pluginet måste vara aktivt).
Vad som fångas upp
Bryggan cron kopplar in sig på tre WordPress-filter:
| WordPress-funktion | Anslutet filter | Beteende |
|---|---|---|
wp_schedule_event() |
pre_schedule_event |
Skapar ett schema för Queuety med samma intervall |
wp_unschedule_event() |
pre_unschedule_event |
Tar bort motsvarande schema för Queuety |
wp_get_scheduled_event() |
pre_get_scheduled_event |
Returnerar schemadata från Queuety |
Endast återkommande händelser (de som har egenskapen schedule, som hourly, twicedaily och daily) fångas upp. Engångshändelser som schemaläggs med wp_schedule_single_event() fångas inte upp.
Så mappas händelser
När ett plugin anropar wp_schedule_event() löser Queuety schemanamnet via wp_get_schedules(), skapar ett schema för Queuety med hanterarnamnet __queuety_cron_{hook} och sparar det ursprungliga WordPress-hooknamnet och argumenten i schemats nyttolast.
Avsikten är att arbetaren Queuety som behandlar det schemalagda jobbet ska anropa do_action() med det ursprungliga hooknamnet och argumenten, så att de befintliga återanropen för WordPress körs med Queuety som styr tidpunkten. CronBridge::process_cron_event() implementerar anropet, men inget anropar det ännu (se begränsningen ovan). Scheman utvärderas dessutom bara av en långlivad wp queuety work-process ungefär en gång i minuten (se Schemaläggning).
Intervallbestämning
Bryggan slår först upp schemanamn via wp_get_schedules() och använder sedan de inbyggda standardvärdena:
| Schemanamn | Intervall |
|---|---|
hourly |
3,600 sekunder |
twicedaily |
43,200 sekunder |
daily |
86,400 sekunder |
weekly |
604,800 sekunder |
Anpassade schemaintervall som registreras via filtret cron_schedules stöds om wp_get_schedules() returnerar dem.
Återställa WP-Cron
Så här återgår du till standardsystemet WordPress cron:
Queuety::restore_wp_cron();
Detta tar bort filterhookarna och gör att WordPress åter kan hantera händelser för cron med sin inbyggda mekanism. Observera att DISABLE_WP_CRON definieras som true när bryggan installeras och inte kan avdefinieras under körning. Du kan därför behöva ta bort konstanten från wp-config.php eller starta om processen.
När du ska använda det
Ersättningen är mest användbar när webbplatsen har låg trafik, när du behöver mer tillförlitlig schemaläggning än WP-Cron kan erbjuda eller när du redan kör arbetare Queuety och vill att körningen av cron ska ingå i samma driftssystem. Den underlättar också centraliserad övervakning, eftersom händelser för cron då visas i samma loggar och mätvärden som övriga köjobb.
Begränsningar
Det finns några viktiga begränsningar. En aktiv arbetare Queuety krävs, annars körs de schemalagda händelserna aldrig. Endast återkommande scheman fångas upp; engångshändelser som skapas med wp_schedule_single_event() ligger fortfarande utanför bryggan. replace_wp_cron() definierar också DISABLE_WP_CRON för resten av den aktuella PHP-processen, så restore_wp_cron() tar bort hookarna men kan inte avdefiniera konstanten. Slutligen fungerar bryggan bara när WordPress är laddat, eftersom den är beroende av WordPress-filter och do_action().
Exempel: fullständig konfiguration
use Queuety\Queuety;
// In your plugin's main file.
add_action( 'plugins_loaded', function () {
Queuety::replace_wp_cron();
} );
Du behöver inte anropa Queuety::init() här: det aktiva pluginet Queuety skapar sin anslutning från databasuppgifterna WordPress och initierar sig självt vid plugins_loaded. replace_wp_cron() installerar bara filtren, så det kräver inte att detta har skett först.
Därefter lagras återkommande händelser som plugin registrerar med wp_schedule_event() som scheman för Queuety. Deras återanrop körs inte förrän #9 har åtgärdats.