Toimingu käivitajad
Queuety::on_action() võimaldab muuta tavalise WordPress toimingu vastupidavaks töövoo käivituseks.
See loob selge ühenduse:
WordPress action -> mapped payload -> durable workflow
See on kasulik, kui vajalik sündmus on WordPress-is juba olemas ja kulukas või pikaajaline vastus peaks toimuma asünkroonselt.
Näide: vaadake sisu üle postituse salvestamisel
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}",
);
Selles näites:
save_poston endiselt algne WordPress sündmusmapteisendab toored hook’i argumendid lihtsaks töövoo olekukswhenjätab soovimatud sündmused vahele enne, kui midagi järjekorda pannakseidempotency_keytakistab korduvatel hook’i käivitustel duplikaattööde käivitamist
Mis käivitub sünkroonselt
Toimingutagasihelistus ise käivitub endiselt praeguse WordPress päringu sees.
See tähendab, et järgmised osad on sünkroonsed:
whenmapidempotency_key
Asünkroonselt käivituvad pärast väljasaatmist ainult töövoo sammud.
Kasuliku koorma reeglid
Seostatud kasulikud koormad peaksid sisaldama lihtsaid massiive, skalaare ja null.
Ära edasta tooreid WordPress objekte, näiteks WP_Post, otse töövoo olekusse. Normaliseeri need esmalt map() sees:
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,
],
);
Võtmed, mis algavad _-ga, lükatakse tagasi, sest need nimed on reserveeritud töövoo sisemisele olekule.
Aktsepteeritavad argumendid
WordPress nõuab toimingutagasihelistuse registreerimisel argumentide arvu accepted_args.
Queuety tuletab selle vaikimisi sinu map, when ja idempotency_key tagasihelistustest, seega tavalisel juhul pole lisaseadistusi vaja:
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,
],
);
Kui vajad käsitsi määramist, edasta selgesõnaliselt accepted_args:
Queuety::on_action(
'comment_post',
workflow: 'comment_review',
accepted_args: 2,
);
Töövoo sisemised koostajad
Saad välja saata registreeritud töövoo nime või sisemise WorkflowBuilder.
Sisemised koostajad on kasulikud, kui hook’iga seotud töövoog on määratletud samas alglaadimisfailis:
$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}",
);
Millal see sobib
Kasuta toimingu käivitajaid, kui:
- WordPress väljastab juba sind huvitava sündmuse
- vastus peaks säilima ka päringu ajalõpu või töötaja taaskäivitamise korral
- järeltegevusel võib olla mitu haru, see võib oodata või vajada heakskiitu
- korduvate hook’i käivituste jaoks on vaja püsivat idempotentsust
Kasuta selle asemel otsest Queuety::dispatch()- või Queuety::workflow()-kutset, kui töö pole seotud WordPress sündmuse piiriga.
Filtrite jaoks mitte
Queuety::on_action() on teadlikult mõeldud ainult toimingute jaoks.
Filtrid on sünkroonsed teisendused päringu ajal. Need peaksid tavaliselt jääma sünkroonseks, sest WordPress eeldab, et filtreeritud väärtus tagastatakse kohe.