
# 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](https://github.com/inline0/queuety/issues/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](https://queuety.inline0.dev/lv/docs/features/scheduling)).

### 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](https://github.com/inline0/queuety/issues/9) problēma, to atzvani netiks izpildīti.
