Ενεργοποιητές ενεργειών
Το Queuety::on_action() σάς επιτρέπει να μετατρέψετε μια κανονική ενέργεια WordPress σε αποστολή ανθεκτικής ροής εργασιών.
Έτσι δημιουργείται μια σαφής σύνδεση:
WordPress action -> mapped payload -> durable workflow
Αυτό είναι χρήσιμο όταν το ενδιαφέρον συμβάν υπάρχει ήδη στο WordPress και η απαιτητική ή μεγάλης διάρκειας απόκριση πρέπει να εκτελεστεί ασύγχρονα.
Παράδειγμα: έλεγχος περιεχομένου κατά την αποθήκευση μιας ανάρτησης
use Queuety\Queuety;
Queuety::on_action(
'save_post',
workflow: 'content_review',
map: static fn ( int $post_id, object $post, bool $update ): array => [
'post_id' => $post_id,
'post_type' => $post->post_type,
'update' => $update,
],
when: static fn ( int $post_id, object $post ): bool => 'post' === $post->post_type,
idempotency_key: static fn ( int $post_id ): string => "save_post:{$post_id}",
);
Σε αυτό το παράδειγμα:
save_postεξακολουθεί να είναι το αρχικό συμβάν WordPressmapμετατρέπει τα ακατέργαστα ορίσματα hook σε απλή κατάσταση ροής εργασιώνwhenπαραλείπει τα ανεπιθύμητα συμβάντα πριν μπουν οτιδήποτε σε ουράidempotency_keyεμποδίζει τις επαναλαμβανόμενες ενεργοποιήσεις hook να αποστείλουν διπλές εκτελέσεις
Τι εκτελείται συγχρονισμένα
Η ίδια η επανάκληση action εξακολουθεί να εκτελείται μέσα στο τρέχον αίτημα WordPress.
Αυτό σημαίνει ότι τα εξής μέρη εκτελούνται συγχρονισμένα:
whenmapidempotency_key
Μόνο τα βήματα της ροής εργασιών εκτελούνται ασύγχρονα μετά την αποστολή.
Κανόνες payload
Τα αντιστοιχισμένα payload πρέπει να περιέχουν απλούς πίνακες, scalar τιμές και null.
Μην περνάτε ακατέργαστα αντικείμενα WordPress, όπως το WP_Post, απευθείας στην κατάσταση ροής εργασιών. Κανονικοποιήστε τα πρώτα μέσα στο map():
Queuety::on_action(
'save_post',
workflow: 'content_review',
map: static fn ( int $post_id, object $post, bool $update ): array => [
'post_id' => $post_id,
'post_type' => $post->post_type,
'post_status' => $post->post_status,
'update' => $update,
],
);
Τα κλειδιά που αρχίζουν με _ απορρίπτονται, επειδή αυτά τα ονόματα προορίζονται για εσωτερική κατάσταση ροής εργασιών.
Αποδεκτά ορίσματα
Το WordPress απαιτεί πλήθος accepted_args κατά την καταχώριση μιας επανάκλησης action.
Από προεπιλογή, το Queuety το συνάγει από τις επανακλήσεις σας map, when και idempotency_key, οπότε συνήθως δεν απαιτείται πρόσθετη ρύθμιση:
Queuety::on_action(
'save_post',
workflow: 'content_review',
map: static fn ( int $post_id, object $post, bool $update ): array => [
'post_id' => $post_id,
'update' => $update,
],
);
Αν χρειάζεστε χειροκίνητη παράκαμψη, περάστε ρητά το accepted_args:
Queuety::on_action(
'comment_post',
workflow: 'comment_review',
accepted_args: 2,
);
Ενσωματωμένοι δημιουργοί ροών εργασιών
Μπορείτε να αποστείλετε ένα καταχωρισμένο όνομα ροής εργασιών ή έναν ενσωματωμένο δημιουργό WorkflowBuilder.
Οι ενσωματωμένοι δημιουργοί είναι χρήσιμοι όταν η ροή εργασιών που αφορά ειδικά το hook ορίζεται στο ίδιο αρχείο bootstrap:
$review = Queuety::workflow( 'comment_review' )
->then( ModerateCommentStep::class )
->then( NotifyModeratorStep::class );
Queuety::on_action(
'comment_post',
workflow: $review,
map: static fn ( int $comment_id ): array => [
'comment_id' => $comment_id,
],
idempotency_key: static fn ( int $comment_id ): string => "comment:{$comment_id}",
);
Πότε είναι κατάλληλο
Χρησιμοποιήστε triggers action όταν:
- το WordPress εκπέμπει ήδη το συμβάν που σας ενδιαφέρει
- η απόκριση πρέπει να επιβιώνει από χρονικά όρια αιτημάτων ή επανεκκινήσεις worker
- η επακόλουθη εργασία μπορεί να διακλαδωθεί, να περιμένει ή να απαιτεί έγκριση
- οι διπλές ενεργοποιήσεις hook χρειάζονται μόνιμη idempotency
Χρησιμοποιήστε απευθείας κλήση Queuety::dispatch() ή Queuety::workflow() όταν η εργασία δεν συνδέεται με όριο συμβάντος WordPress.
Όχι για filters
Το Queuety::on_action() προορίζεται αποκλειστικά για action.
Τα filters είναι συγχρονισμένοι μετασχηματισμοί κατά τον χρόνο του αιτήματος. Συνήθως πρέπει να παραμένουν συγχρονισμένα, επειδή το WordPress αναμένει να επιστραφεί αμέσως μια φιλτραρισμένη τιμή.