
# 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](https://github.com/inline0/queuety/issues/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](https://queuety.inline0.dev/hu/docs/features/scheduling) 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](https://github.com/inline0/queuety/issues/9) nincs kijavítva, a hozzájuk tartozó visszahívások nem futnak le.
