Μετάβαση στο περιεχόμενο

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

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

Τρέχων περιορισμός: η γέφυρα δημιουργεί τα χρονοδιαγράμματα Queuety, αλλά ο εργάτης δεν έχει χειριστή για τις εργασίες __queuety_cron_{hook} που παράγουν, επομένως οι αρχικές κλήσεις επανάκλησης WordPress δεν εκτελούνται ποτέ. Κάθε εργασία αποτυγχάνει, επαναλαμβάνεται με καθυστέρηση μεταξύ προσπαθειών και τελικά θάβεται (#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 μακράς διάρκειας, περίπου μία φορά το λεπτό (δείτε την ενότητα Προγραμματισμός).

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

Η γέφυρα επιλύει πρώτα τα ονόματα χρονοδιαγραμμάτων μέσω του 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, οι κλήσεις επανάκλησής τους δεν εκτελούνται.