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

Ενεργοποιητές ενεργειών

Το Queuety::on_action() σάς επιτρέπει να μετατρέψετε μια κανονική ενέργεια WordPress σε αποστολή ανθεκτικής ροής εργασιών.

Έτσι δημιουργείται μια σαφής σύνδεση:

WordPress action -> mapped payload -> durable workflow

Αυτό είναι χρήσιμο όταν το ενδιαφέρον συμβάν υπάρχει ήδη στο WordPress και η απαιτητική ή μεγάλης διάρκειας απόκριση πρέπει να εκτελεστεί ασύγχρονα.

Παράδειγμα: έλεγχος περιεχομένου κατά την αποθήκευση μιας ανάρτησης

PHP
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 εξακολουθεί να είναι το αρχικό συμβάν WordPress
  • map μετατρέπει τα ακατέργαστα ορίσματα hook σε απλή κατάσταση ροής εργασιών
  • when παραλείπει τα ανεπιθύμητα συμβάντα πριν μπουν οτιδήποτε σε ουρά
  • idempotency_key εμποδίζει τις επαναλαμβανόμενες ενεργοποιήσεις hook να αποστείλουν διπλές εκτελέσεις

Τι εκτελείται συγχρονισμένα

Η ίδια η επανάκληση action εξακολουθεί να εκτελείται μέσα στο τρέχον αίτημα WordPress.

Αυτό σημαίνει ότι τα εξής μέρη εκτελούνται συγχρονισμένα:

  • when
  • map
  • idempotency_key

Μόνο τα βήματα της ροής εργασιών εκτελούνται ασύγχρονα μετά την αποστολή.

Κανόνες payload

Τα αντιστοιχισμένα payload πρέπει να περιέχουν απλούς πίνακες, scalar τιμές και null.

Μην περνάτε ακατέργαστα αντικείμενα WordPress, όπως το WP_Post, απευθείας στην κατάσταση ροής εργασιών. Κανονικοποιήστε τα πρώτα μέσα στο map():

PHP
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, οπότε συνήθως δεν απαιτείται πρόσθετη ρύθμιση:

PHP
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:

PHP
Queuety::on_action(
    'comment_post',
    workflow: 'comment_review',
    accepted_args: 2,
);

Ενσωματωμένοι δημιουργοί ροών εργασιών

Μπορείτε να αποστείλετε ένα καταχωρισμένο όνομα ροής εργασιών ή έναν ενσωματωμένο δημιουργό WorkflowBuilder.

Οι ενσωματωμένοι δημιουργοί είναι χρήσιμοι όταν η ροή εργασιών που αφορά ειδικά το hook ορίζεται στο ίδιο αρχείο bootstrap:

PHP
$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 αναμένει να επιστραφεί αμέσως μια φιλτραρισμένη τιμή.