Spúšťače akcií
Queuety::on_action() umožňuje zmeniť bežnú akciu WordPress na odolné odoslanie úlohy do pracovného postupu.
Tým vzniká čisté prepojenie:
WordPress action -> mapped payload -> durable workflow
Hodí sa to, keď zaujímavá udalosť už nastala v WordPress a náročná alebo dlhotrvajúca reakcia sa má vykonať asynchrónne.
Príklad: kontrola obsahu pri uložení príspevku
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}",
);
V tomto príklade:
save_postje stále pôvodná udalosť WordPressmapmení nespracované argumenty hooku na obyčajný stav pracovného postupuwhenpreskočí nežiaduce udalosti skôr, než sa čokoľvek zaradí do frontuidempotency_keyzabraňuje tomu, aby opakované spustenia hooku odoslali duplicitné úlohy
Čo sa vykonáva synchrónne
Samotná spätná funkcia akcie sa stále vykonáva v rámci aktuálnej požiadavky WordPress.
To znamená, že tieto časti sú synchrónne:
whenmapidempotency_key
Asynchrónne sa po odoslaní vykonávajú iba kroky pracovného postupu.
Pravidlá pre údaje požiadavky
Mapované údaje požiadavky by mali obsahovať obyčajné polia, skaláre a null.
Neposielajte nespracované objekty WordPress, ako je WP_Post, priamo do stavu pracovného postupu. Najprv ich normalizujte v 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,
],
);
Kľúče začínajúce na _ sa odmietnu, pretože tieto názvy sú vyhradené pre interný stav pracovného postupu.
Prijaté argumenty
WordPress pri registrácii spätnej funkcie akcie vyžaduje počet accepted_args.
Queuety ho štandardne odvodí z vašich spätných funkcií map, when a idempotency_key, takže v bežnom prípade nie je potrebná ďalšia konfigurácia:
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,
],
);
Ak potrebujete manuálne zadať inú hodnotu, výslovne nastavte accepted_args:
Queuety::on_action(
'comment_post',
workflow: 'comment_review',
accepted_args: 2,
);
Vstavané nástroje na tvorbu pracovných postupov
Môžete odoslať registrovaný názov pracovného postupu alebo vložený nástroj na jeho tvorbu WorkflowBuilder.
Vložené nástroje na tvorbu sa hodia, keď je pracovný postup špecifický pre hook definovaný v tom istom zavádzacom súbore:
$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}",
);
Kedy sa to hodí
Spúšťače akcií použite, keď:
- WordPress už vysiela udalosť, ktorá vás zaujíma
- reakcia má pretrvať aj po vypršaní časového limitu požiadavky alebo reštarte workera
- nadväzujúca práca sa môže vetviť, čakať alebo vyžadovať schválenie
- opakované spustenia hooku musia byť spoľahlivo idempotentné
Ak práca nesúvisí s hranicou udalosti WordPress, použite namiesto toho priame volanie Queuety::dispatch() alebo Queuety::workflow().
Nie pre filtre
Queuety::on_action() je zámerne určené iba pre akcie.
Filtre sú synchrónne transformácie vykonávané počas požiadavky. Zvyčajne by mali zostať synchrónne, pretože WordPress očakáva, že filtrovaná hodnota sa vráti okamžite.