
# Αντικατάσταση WP-Cron

Το Queuety μπορεί να αντικαταστήσει το ενσωματωμένο σύστημα WordPress cron. Όταν είναι ενεργοποιημένο, οι κλήσεις στο `wp_schedule_event()` αναχαιτίζονται και δρομολογούνται στον προγραμματιστή του Queuety αντί για τον προεπιλεγμένο μηχανισμό WP-Cron. Τα συμβάντα προορίζονται για επεξεργασία από τον εργάτη Queuety, ο οποίος επιτρέπει την εκτέλεση ανεξάρτητα από την επισκεψιμότητα του ιστότοπου.

> **Τρέχων περιορισμός:** η γέφυρα δημιουργεί τα χρονοδιαγράμματα Queuety, αλλά ο εργάτης δεν έχει χειριστή για τις εργασίες `__queuety_cron_{hook}` που παράγουν, επομένως οι αρχικές κλήσεις επανάκλησης WordPress δεν εκτελούνται ποτέ. Κάθε εργασία αποτυγχάνει, επαναλαμβάνεται με καθυστέρηση μεταξύ προσπαθειών και τελικά θάβεται ([#9](https://github.com/inline0/queuety/issues/9)). Μην ενεργοποιήσετε τη γέφυρα σε ιστότοπο όπου πρέπει να εκτελούνται τα συμβάντα cron μέχρι να διορθωθεί αυτό.

## Ενεργοποίηση της αντικατάστασης

Καλέστε το `Queuety::replace_wp_cron()` νωρίς κατά την αρχικοποίηση του πρόσθετου ή του θέματος:

```php
use Queuety\Queuety;

Queuety::replace_wp_cron();
```

Αυτό συνήθως καλείται στο κύριο αρχείο του πρόσθετου ή σε ένα hook `plugins_loaded`. Πρέπει να κληθεί όσο είναι φορτωμένο το WordPress (το πρόσθετο πρέπει να είναι ενεργό).

## Τι αναχαιτίζει

Η γέφυρα cron συνδέεται με τρία φίλτρα WordPress:

| Συνάρτηση WordPress | Συνδεδεμένο φίλτρο | Συμπεριφορά |
|---|---|---|
| `wp_schedule_event()` | `pre_schedule_event` | Δημιουργεί χρονοδιάγραμμα Queuety με το ίδιο διάστημα |
| `wp_unschedule_event()` | `pre_unschedule_event` | Αφαιρεί το αντίστοιχο χρονοδιάγραμμα Queuety |
| `wp_get_scheduled_event()` | `pre_get_scheduled_event` | Επιστρέφει δεδομένα χρονοδιαγράμματος από το Queuety |

Αναχαιτίζονται μόνο τα **επαναλαμβανόμενα** συμβάντα (όσα έχουν ιδιότητα `schedule` όπως τα `hourly`, `twicedaily`, `daily`). Τα συμβάντα μίας εκτέλεσης που προγραμματίζονται με το `wp_schedule_single_event()` δεν αναχαιτίζονται.

## Πώς αντιστοιχίζονται τα συμβάντα

Όταν ένα πρόσθετο καλεί το `wp_schedule_event()`, το Queuety επιλύει το όνομα χρονοδιαγράμματος μέσω του `wp_get_schedules()`, δημιουργεί χρονοδιάγραμμα Queuety με όνομα χειριστή `__queuety_cron_{hook}` και αποθηκεύει το αρχικό όνομα hook WordPress και τα ορίσματα στο φορτίο του χρονοδιαγράμματος.

Η προβλεπόμενη συμπεριφορά είναι ο εργάτης Queuety που επεξεργάζεται την προγραμματισμένη εργασία να καλεί το `do_action()` με το αρχικό όνομα hook και τα ορίσματα, ώστε να εκτελούνται οι υπάρχουσες κλήσεις επανάκλησης WordPress με το Queuety να καθορίζει τον χρονισμό. Το `CronBridge::process_cron_event()` υλοποιεί αυτήν την κλήση, αλλά προς το παρόν δεν την καλεί τίποτα (δείτε τον παραπάνω περιορισμό). Τα χρονοδιαγράμματα αξιολογούνται επίσης μόνο από διεργασία `wp queuety work` μακράς διάρκειας, περίπου μία φορά το λεπτό (δείτε την ενότητα [Προγραμματισμός](https://queuety.inline0.dev/el/docs/features/scheduling)).

### Επίλυση διαστημάτων

Η γέφυρα επιλύει πρώτα τα ονόματα χρονοδιαγραμμάτων μέσω του `wp_get_schedules()` και στη συνέχεια χρησιμοποιεί τις ενσωματωμένες προεπιλογές:

| Όνομα χρονοδιαγράμματος | Διάστημα |
|---|---|
| `hourly` | 3,600 δευτερόλεπτα |
| `twicedaily` | 43,200 δευτερόλεπτα |
| `daily` | 86,400 δευτερόλεπτα |
| `weekly` | 604,800 δευτερόλεπτα |

Υποστηρίζονται προσαρμοσμένα διαστήματα χρονοδιαγραμμάτων που έχουν δηλωθεί μέσω του φίλτρου `cron_schedules`, εφόσον το `wp_get_schedules()` τα επιστρέφει.

## Επαναφορά του WP-Cron

Για να επαναφέρετε το προεπιλεγμένο σύστημα WordPress cron:

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

Αυτό αφαιρεί τα hooks φίλτρων και επιτρέπει ξανά στο WordPress να διαχειρίζεται συμβάντα cron μέσω του ενσωματωμένου μηχανισμού του. Σημειώστε ότι το `DISABLE_WP_CRON` ορίζεται ως `true` κατά την εγκατάσταση της γέφυρας και δεν μπορεί να αποοριστεί κατά την εκτέλεση, επομένως ίσως χρειαστεί να αφαιρέσετε αυτήν τη σταθερά από το `wp-config.php` ή να επανεκκινήσετε τη διεργασία.

## Πότε να το χρησιμοποιήσετε

Η αντικατάσταση είναι πιο χρήσιμη όταν ο ιστότοπός σας έχει λίγη επισκεψιμότητα, όταν χρειάζεστε πιο αξιόπιστο χρονισμό από αυτόν που μπορεί να προσφέρει το WP-Cron ή όταν ήδη εκτελείτε εργάτες Queuety και θέλετε η εκτέλεση cron να ενταχθεί στο ίδιο λειτουργικό σύστημα. Βοηθά επίσης όταν είναι σημαντική η κεντρική παρατηρησιμότητα, επειδή τα συμβάντα cron εμφανίζονται τότε στα ίδια αρχεία καταγραφής και στις ίδιες μετρήσεις με τις υπόλοιπες εργασίες της ουράς σας.

## Περιορισμοί

Υπάρχουν ορισμένοι σημαντικοί περιορισμοί. Απαιτείται ενεργός εργάτης Queuety, διαφορετικά τα προγραμματισμένα συμβάντα δεν θα εκτελεστούν ποτέ. Αναχαιτίζονται μόνο τα επαναλαμβανόμενα χρονοδιαγράμματα· τα συμβάντα μίας εκτέλεσης που δημιουργούνται με το `wp_schedule_single_event()` εξακολουθούν να μένουν εκτός της γέφυρας. Το `replace_wp_cron()` ορίζει επίσης το `DISABLE_WP_CRON` για την υπόλοιπη διάρκεια της τρέχουσας διεργασίας PHP, επομένως το `restore_wp_cron()` αφαιρεί τα hooks αλλά δεν μπορεί να αποορίσει τη σταθερά. Τέλος, η γέφυρα λειτουργεί μόνο όταν είναι φορτωμένο το WordPress, επειδή εξαρτάται από τα φίλτρα WordPress και το `do_action()`.

## Παράδειγμα: πλήρης ρύθμιση

```php
use Queuety\Queuety;

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

Δεν χρειάζεται να καλέσετε εδώ το `Queuety::init()`: το ενεργό πρόσθετο Queuety δημιουργεί τη σύνδεσή του από τα διαπιστευτήρια της βάσης δεδομένων WordPress και αρχικοποιείται στο `plugins_loaded`. Το `replace_wp_cron()` εγκαθιστά μόνο τα φίλτρα, επομένως δεν εξαρτάται από το αν αυτό έχει ήδη συμβεί.

Μετά από αυτό, τα επαναλαμβανόμενα συμβάντα που καταχωρίζουν τα πρόσθετα με το `wp_schedule_event()` αποθηκεύονται ως χρονοδιαγράμματα Queuety. Μέχρι να διορθωθεί το [#9](https://github.com/inline0/queuety/issues/9), οι κλήσεις επανάκλησής τους δεν εκτελούνται.
