
# WP-Cron asendus

Queuety saab asendada sisseehitatud WordPress cron süsteemi. Kui see on lubatud, püütakse `wp_schedule_event()` väljakutsed kinni ja suunatakse vaikemehhanismi WP-Cron asemel ümber Queuety ajastajasse. Sündmused on mõeldud töötlemiseks Queuety töötleja poolt, mis käivitab need saidi liiklusest sõltumatult.

> **Praegune piirang:** sild loob Queuety ajastused, kuid töötlejal puudub nende loodud `__queuety_cron_{hook}` tööde käsitleja, mistõttu algseid WordPress tagasikutseid ei käivitata kunagi. Iga töö ebaõnnestub, seda proovitakse pärast ooteaega uuesti ja lõpuks jäetakse ootele ([#9](https://github.com/inline0/queuety/issues/9)). Ärge lubage silda saidil, kus cron sündmused peavad käivituma, kuni see probleem pole lahendatud.

## Asenduse lubamine

Kutsuge `Queuety::replace_wp_cron()` varakult välja plugina või teema lähtestamise ajal:

```php
use Queuety\Queuety;

Queuety::replace_wp_cron();
```

Tavaliselt kutsutakse seda välja plugina põhifailis või `plugins_loaded` konksus. See tuleb välja kutsuda siis, kui WordPress on laaditud (plugin peab olema aktiivne).

## Mida see kinni püüab

cron sild haagib end kolme WordPress filtri külge:

| WordPress funktsioon | Haagitud filter | Toimimine |
|---|---|---|
| `wp_schedule_event()` | `pre_schedule_event` | Loob sama intervalliga ajastuse Queuety |
| `wp_unschedule_event()` | `pre_unschedule_event` | Eemaldab vastava ajastuse Queuety |
| `wp_get_scheduled_event()` | `pre_get_scheduled_event` | Tagastab ajastuse andmed allikast Queuety |

Kinni püütakse ainult **korduvad** sündmused (need, millel on omadus `schedule`, näiteks `hourly`, `twicedaily`, `daily`). Meetodiga `wp_schedule_single_event()` ajastatud ühekordsed sündmused jäävad kinni püüdmata.

## Sündmuste kaardistamine

Kui plugin kutsub välja `wp_schedule_event()`, lahendab Queuety ajastuse nime `wp_get_schedules()` kaudu, loob Queuety ajastuse käsitleja nimega `__queuety_cron_{hook}` ning salvestab ajastuse andmekoormasse algse WordPress konksu nime ja argumendid.

Eeldatavasti kutsub Queuety töötleja ajastatud tööd töödeldes välja `do_action()` algse konksu nime ja argumentidega, et olemasolevad WordPress tagasikutsed käivituksid ja Queuety määraks ajastuse. `CronBridge::process_cron_event()` rakendab selle väljakutse, kuid miski ei käivita seda veel (vt ülaltoodud piirangut). Ajastusi hindab ka ainult pikalt töötav `wp queuety work` protsess, umbes kord minutis (vt [Ajastamine](https://queuety.inline0.dev/et/docs/features/scheduling)).

### Intervalli määramine

Sild lahendab ajastuse nimed kõigepealt läbi `wp_get_schedules()` ja kasutab seejärel sisseehitatud vaikeväärtusi:

| Ajastuse nimi | Intervall |
|---|---|
| `hourly` | 3,600 sekundit |
| `twicedaily` | 43,200 sekundit |
| `daily` | 86,400 sekundit |
| `weekly` | 604,800 sekundit |

Filtri `cron_schedules` kaudu registreeritud kohandatud ajastusintervallid on toetatud, kui `wp_get_schedules()` need tagastab.

## WP-Cron taastamine

Vaikimisi WordPress cron süsteemi taastamiseks tehke järgmist:

```php
Queuety::restore_wp_cron();
```

See eemaldab filtrikonksud ja võimaldab WordPress-l taas hallata cron sündmusi sisseehitatud mehhanismi abil. Arvestage, et silla installimisel määratakse `DISABLE_WP_CRON` väärtuseks `true` ja seda ei saa käitusajal määratlemata jätta, seega peate võib-olla selle konstandi failist `wp-config.php` eemaldama või protsessi taaskäivitama.

## Millal seda kasutada

Asendus on kõige kasulikum väikese liiklusega saidil, kui vajate usaldusväärsemat ajastust, kui WP-Cron võimaldab, või kui kasutate juba Queuety töötlejaid ning soovite, et cron käivitamine toimuks samas operatsioonisüsteemis. See aitab ka siis, kui keskne jälgitavus on oluline, sest cron sündmused kajastuvad siis samades logides ja mõõdikutes nagu muu järjekorratöö.

## Piirangud

Sellega kaasnevad mõned olulised piirangud. Ajastatud sündmuste käivitamiseks peab töötama aktiivne Queuety töötleja. Kinni püütakse ainult korduvad ajastused; meetodiga `wp_schedule_single_event()` loodud ühekordsed sündmused jäävad sillast välja. `replace_wp_cron()` määratleb ka ülejäänud praeguse PHP protsessi ajaks `DISABLE_WP_CRON`, seega eemaldab `restore_wp_cron()` konksud, kuid ei saa konstanti määratlemata jätta. Lõpuks töötab sild ainult siis, kui WordPress on laaditud, sest see sõltub WordPress filtritest ja `do_action()`-st.

## Näide: täielik seadistus

```php
use Queuety\Queuety;

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

Siin pole vaja välja kutsuda `Queuety::init()`: aktiivne Queuety plugin loob oma ühenduse WordPress andmebaasi mandaatide põhjal ja lähtestab end `plugins_loaded` ajal. `replace_wp_cron()` paigaldab ainult filtrid, seega ei sõltu see sellest, kas nimetatu on juba toimunud.

Seejärel salvestatakse pluginate `wp_schedule_event()` abil registreeritud korduvad sündmused ajastustena Queuety. Kuni [#9](https://github.com/inline0/queuety/issues/9) pole parandatud, nende tagasikutseid ei käivitata.
