Veiksmų paleidikliai
Queuety::on_action() leidžia įprastą WordPress veiksmą paversti patvariu darbo eigos iškvietimu.
Taip sukuriama aiški jungtis:
WordPress action -> mapped payload -> durable workflow
Tai naudinga, kai svarbus įvykis jau vyksta WordPress, o brangiai kainuojantis arba ilgai trunkantis atsakas turi būti vykdomas asinchroniškai.
Pavyzdys: turinio peržiūra išsaugojus įrašą
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}",
);
Šiame pavyzdyje:
save_posttebėra pradinis WordPress įvykismapneapdorotus kabliuko argumentus paverčia paprasta darbo eigos būsenawhenpraleidžia nepageidaujamus įvykius, kol jie dar neįtraukti į eilęidempotency_keyneleidžia pakartotinai suveikusiems kabliukams išsiųsti pasikartojančių paleidimų
Kas vykdoma sinchroniškai
Pats veiksmo atgalinis iškvietimas vis dar vykdomas dabartinės WordPress užklausos metu.
Tai reiškia, kad šios dalys vykdomos sinchroniškai:
whenmapidempotency_key
Asinchroniškai po iškvietimo vykdomi tik darbo eigos žingsniai.
Naudingojo turinio taisyklės
Susietą naudingąjį turinį turėtų sudaryti paprasti masyvai, skaliarai ir null.
Nepersiųskite neapdorotų WordPress objektų, pvz., WP_Post, tiesiai į darbo eigos būseną. Pirmiausia normalizuokite juos map() viduje:
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,
],
);
Raktai, prasidedantys _, atmetami, nes šie pavadinimai rezervuoti vidinei darbo eigos būsenai.
Priimami argumentai
Registruojant veiksmo atgalinio iškvietimo funkciją, WordPress reikia nurodyti accepted_args skaičių.
Pagal numatytuosius nustatymus Queuety jį nustato pagal jūsų map, when ir idempotency_key atgalinio iškvietimo funkcijas, todėl įprastu atveju papildomos konfigūracijos nereikia:
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,
],
);
Jei reikia rankiniu būdu nustatyti kitą reikšmę, aiškiai perduokite accepted_args:
Queuety::on_action(
'comment_post',
workflow: 'comment_review',
accepted_args: 2,
);
Įterptieji darbo eigos kūrimo įrankiai
Galite iškviesti registruotos darbo eigos pavadinimą arba įterptąjį WorkflowBuilder.
Įterptieji kūrimo įrankiai naudingi, kai konkrečiam kabliukui skirta darbo eiga apibrėžta tame pačiame paleidimo faile:
$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}",
);
Kada tai tinka
Veiksmų paleidiklius naudokite, kai:
- WordPress jau sukuria jums svarbų įvykį
- atsakas turi atlaikyti užklausos skirtąjį laiką arba darbuotojo paleidimą iš naujo
- tolesnis darbas gali išsišakoti, laukti arba reikalauti patvirtinimo
- pasikartojantiems kabliuko suveikimams reikia patvaraus apdorojimo tik vieną kartą
Vietoj to tiesiogiai iškvieskite Queuety::dispatch() arba Queuety::workflow(), kai darbas nesusijęs su WordPress įvykio riba.
Netinka filtrams
Queuety::on_action() sąmoningai skirtas tik veiksmams.
Filtrai sinchroniškai transformuoja užklausas. Paprastai jie turi veikti sinchroniškai, nes WordPress tikisi, kad filtruota reikšmė bus grąžinta iš karto.