
# WP-Cron pakeitimas

Queuety gali pakeisti integruotą WordPress cron sistemą. Ją įjungus, iškvietimai `wp_schedule_event()` perimami ir nukreipiami į Queuety planuoklį, o ne į numatytąjį WP-Cron mechanizmą. Įvykius apdoroja Queuety darbininkas, todėl jie vykdomi nepriklausomai nuo svetainės lankomumo.

> **Dabartinis apribojimas:** tiltas sukuria Queuety tvarkaraščius, tačiau darbininkas neturi jų sukuriamų `__queuety_cron_{hook}` užduočių apdorojimo funkcijos, todėl originalios WordPress atgalinio iškvietimo funkcijos niekada nevykdomos. Kiekviena užduotis nepavyksta, po delsos bandoma dar kartą ir galiausiai perkeliama į nepavykusių užduočių saugyklą ([#9](https://github.com/inline0/queuety/issues/9)). Nejunkite tilto svetainėje, kurioje būtina vykdyti cron įvykius, kol ši problema neišspręsta.

## Pakeitimo įjungimas

Iškvieskite `Queuety::replace_wp_cron()` anksti inicijuodami papildinį arba temą:

```php
use Queuety\Queuety;

Queuety::replace_wp_cron();
```

Paprastai ši funkcija iškviečiama pagrindiniame papildinio faile arba per `plugins_loaded` kabliuką. Ji turi būti iškviesta, kai įkeltas WordPress (papildinys turi būti aktyvus).

## Ką jis perima

cron tiltas prisijungia prie trijų WordPress filtrų:

| WordPress funkcija | Prijungtas filtras | Veikimas |
|---|---|---|
| `wp_schedule_event()` | `pre_schedule_event` | Sukuria Queuety tvarkaraštį su tokiu pačiu intervalu |
| `wp_unschedule_event()` | `pre_unschedule_event` | Pašalina atitinkamą Queuety tvarkaraštį |
| `wp_get_scheduled_event()` | `pre_get_scheduled_event` | Grąžina tvarkaraščio duomenis iš Queuety |

Perimami tik **pasikartojantys** įvykiai (turintys savybę `schedule`, pavyzdžiui, `hourly`, `twicedaily`, `daily`). Vienkartiniai įvykiai, suplanuoti naudojant `wp_schedule_single_event()`, neperimami.

## Kaip susiejami įvykiai

Kai papildinys iškviečia `wp_schedule_event()`, Queuety per `wp_get_schedules()` nustato tvarkaraščio pavadinimą, sukuria Queuety tvarkaraštį su apdorojimo funkcijos pavadinimu `__queuety_cron_{hook}` ir tvarkaraščio naudingojoje apkrovoje išsaugo originalų WordPress kabliuko pavadinimą bei argumentus.

Numatyta, kad Queuety darbininkas, apdorojantis suplanuotą užduotį, iškviečia `do_action()` su originaliu kabliuko pavadinimu ir argumentais, kad esamos WordPress atgalinio iškvietimo funkcijos būtų vykdomos, o laiką valdytų Queuety. `CronBridge::process_cron_event()` šį iškvietimą įgyvendina, bet kol kas jo niekas neatlieka (žr. anksčiau nurodytą apribojimą). Tvarkaraščius taip pat apdoroja tik ilgai veikiantis `wp queuety work` procesas, maždaug kartą per minutę (žr. [Planavimas](https://queuety.inline0.dev/lt/docs/features/scheduling)).

### Intervalo nustatymas

Tiltas pirmiausia ieško tvarkaraščių pavadinimų per `wp_get_schedules()`, o tada naudoja integruotąsias numatytąsias reikšmes:

| Tvarkaraščio pavadinimas | Intervalas |
|---|---|
| `hourly` | 3,600 sekundžių |
| `twicedaily` | 43,200 sekundžių |
| `daily` | 86,400 sekundžių |
| `weekly` | 604,800 sekundžių |

Palaikomi pasirinktiniai tvarkaraščių intervalai, užregistruoti per filtrą `cron_schedules`, jei juos grąžina `wp_get_schedules()`.

## WP-Cron atkūrimas

Norėdami grįžti prie numatytosios WordPress cron sistemos:

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

Taip pašalinami filtrų kabliukai ir WordPress vėl gali apdoroti cron įvykius naudodama integruotą mechanizmą. Atminkite, kad įdiegus tiltą, `DISABLE_WP_CRON` apibrėžiama kaip `true` ir vykdymo metu jos apibrėžimo panaikinti negalima, todėl gali tekti pašalinti šią konstantą iš `wp-config.php` arba paleisti procesą iš naujo.

## Kada naudoti

Pakeitimas naudingiausias, kai svetainės lankomumas mažas, kai reikia patikimesnio vykdymo laiko nei gali užtikrinti WP-Cron arba kai jau naudojate Queuety darbininkus ir norite, kad cron vykdymas vyktų toje pačioje operacinėje sistemoje. Jis taip pat naudingas, kai svarbi centralizuota stebėsena, nes cron įvykiai tada rodomi tuose pačiuose žurnaluose ir metrikose kaip ir kitos eilės užduotys.

## Apribojimai

Yra keletas svarbių apribojimų. Kad suplanuoti įvykiai būtų vykdomi, būtinas aktyvus Queuety. Perimami tik pasikartojantys tvarkaraščiai; vienkartiniai įvykiai, sukurti naudojant `wp_schedule_single_event()`, vis tiek nepatenka į šią sąsają. `replace_wp_cron()` taip pat apibrėžia `DISABLE_WP_CRON` likusiam dabartinio PHP proceso laikui, todėl `restore_wp_cron()` pašalina kabliukus, bet negali panaikinti konstantos apibrėžimo. Galiausiai ši sąsaja veikia tik įkėlus WordPress, nes ji priklauso nuo WordPress filtrų ir `do_action()`.

## Pavyzdys: visa sąranka

```php
use Queuety\Queuety;

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

Čia nereikia kviesti `Queuety::init()`: aktyvusis Queuety papildinys užmezga ryšį naudodamas WordPress duomenų bazės prisijungimo duomenis ir inicijuoja save `plugins_loaded`. `replace_wp_cron()` tik įdiegia filtrus, todėl jam nesvarbu, ar tai jau įvyko.

Po to pasikartojantys įvykiai, kuriuos papildiniai užregistruoja per `wp_schedule_event()`, išsaugomi kaip Queuety tvarkaraščiai. Kol nebus ištaisyta [#9](https://github.com/inline0/queuety/issues/9), jų atgalinio iškvietimo funkcijos nevykdomos.
