Toimintokäynnistimet
Queuety::on_action()-palvelulla voit muuttaa tavallisen kohteen WordPress toiminnon kestävän työnkulun käynnistykseksi.
Näin saat selkeän yhteyden:
WordPress action -> mapped payload -> durable workflow
Tästä on hyötyä, kun kiinnostava tapahtuma syntyy jo kohteessa WordPress ja kalliin tai pitkäkestoisen käsittelyn pitäisi tapahtua asynkronisesti.
Esimerkki: tarkista sisältö, kun artikkeli tallennetaan
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}",
);
Tässä esimerkissä:
save_poston edelleen alkuperäinen kohteen WordPress tapahtumamapmuuntaa koukun raaka-argumentit tavalliseksi työnkulun tilaksiwhenohittaa tarpeettomat tapahtumat ennen jonotustaidempotency_keyestää toistuvia koukkukutsuja käynnistämästä päällekkäisiä suorituksia
Mikä suoritetaan synkronisesti
Toiminnon takaisinsoittokoodi suoritetaan edelleen nykyisen kohteen WordPress pyynnön sisällä.
Tämä tarkoittaa, että seuraavat osat suoritetaan synkronisesti:
whenmapidempotency_key
Vain työnkulun vaiheet suoritetaan asynkronisesti käynnistyksen jälkeen.
Hyötykuorman säännöt
Kohdistettujen hyötykuormien tulee sisältää tavallisia taulukoita, skalaareja ja arvoja null.
Älä välitä raakamuotoisia WordPress-objekteja, kuten WP_Post, suoraan työnkulun tilaan. Normalisoi ne ensin kohteessa 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,
],
);
Avaimet, joiden alussa on _, hylätään, koska nimet on varattu työnkulun sisäiseen tilaan.
Hyväksytyt argumentit
WordPress vaatii argumenttien määrän accepted_args, kun toimintokutsun takaisinsoitto rekisteröidään.
Queuety päättelee määrän oletuksena takaisinsoitoista map, when ja idempotency_key, joten tavallinen käyttötapaus ei vaadi lisäasetuksia:
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,
],
);
Jos tarvitset manuaalisen ohituksen, välitä accepted_args nimenomaisesti:
Queuety::on_action(
'comment_post',
workflow: 'comment_review',
accepted_args: 2,
);
Työnkulkujen luonti suoraan koodissa
Voit käynnistää rekisteröidyn työnkulun nimen tai suoraan määritellyn kohteen WorkflowBuilder.
Suoraan määritellyt työnkulut ovat hyödyllisiä, kun koukkukohtainen työnkulku määritellään samassa käynnistystiedostossa:
$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}",
);
Milloin tämä sopii hyvin
Käytä toimintokäynnistimiä, kun:
- WordPress tuottaa jo tarvitsemasi tapahtuman
- käsittelyn pitäisi kestää pyyntöjen aikakatkaisut tai työntekijöiden uudelleenkäynnistykset
- jatkotyö voi haarautua, odottaa tai vaatia hyväksynnän
- toistuvien koukkukutsujen käsittelyyn tarvitaan pysyvä idempotenssi
Käytä sen sijaan suoraa Queuety::dispatch()- tai Queuety::workflow()-kutsua, kun työ ei liity kohteen WordPress tapahtumarajaan.
Ei suodattimille
Queuety::on_action() on tarkoitettu vain toimintoihin.
Suodattimet ovat synkronisia pyyntöaikaisia muunnoksia. Niiden tulisi yleensä pysyä synkronisina, koska WordPress odottaa suodatetun arvon palautuvan heti.