Déclencheurs d’action
Queuety::on_action() vous permet de transformer une action WordPress ordinaire en lancement durable de workflow.
Cela vous offre un lien direct :
WordPress action -> mapped payload -> durable workflow
Cette approche est utile lorsque l’événement pertinent existe déjà dans WordPress et que le traitement coûteux ou de longue durée doit s’effectuer de façon asynchrone.
Exemple : réviser le contenu à l’enregistrement d’un article
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}",
);
Dans cet exemple :
save_postreste l’événement WordPress d’originemaptransforme les arguments bruts du hook en état de workflow simplewhenignore les événements indésirables avant leur mise en file d’attenteidempotency_keyempêche les déclenchements répétés du hook de lancer des exécutions en double
Ce qui s’exécute de manière synchrone
Le callback de l’action lui-même s’exécute toujours dans la requête WordPress en cours.
Cela signifie que ces parties sont synchrones :
whenmapidempotency_key
Seules les étapes du workflow s’exécutent de manière asynchrone après le déclenchement.
Règles relatives à la charge utile
Les charges utiles mappées doivent contenir des tableaux simples, des scalaires et null.
Ne transmettez pas directement des objets WordPress bruts comme WP_Post à l’état du workflow. Normalisez-les d’abord dans 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,
],
);
Les clés commençant par _ sont rejetées, car ces noms sont réservés à l’état interne du workflow.
Arguments acceptés
WordPress exige un nombre d’accepted_args lors de l’enregistrement d’un callback d’action.
Queuety le déduit par défaut de vos callbacks map, when et idempotency_key ; le cas courant ne nécessite donc aucune configuration supplémentaire :
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,
],
);
Si vous avez besoin d’une surcharge manuelle, transmettez explicitement accepted_args :
Queuety::on_action(
'comment_post',
workflow: 'comment_review',
accepted_args: 2,
);
Créateurs de workflow en ligne
Vous pouvez déclencher un workflow enregistré par son nom ou un WorkflowBuilder en ligne.
Les créateurs en ligne sont utiles lorsque le workflow propre au hook est défini dans le même fichier d’initialisation :
$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}",
);
Cas d’utilisation adaptés
Utilisez les déclencheurs d’action lorsque :
- WordPress émet déjà l’événement qui vous intéresse
- la réponse doit résister aux délais d’expiration des requêtes ou aux redémarrages des processus de travail
- le travail de suivi peut comporter des branches, attendre ou nécessiter une approbation
- les déclenchements répétés du hook doivent être rendus idempotents de façon durable
Utilisez plutôt un appel direct à Queuety::dispatch() ou Queuety::workflow() lorsque le travail n’est pas lié à une frontière d’événement WordPress.
Pas pour les filtres
Queuety::on_action() est volontairement réservé aux actions.
Les filtres sont des transformations synchrones effectuées au moment de la requête. Ils doivent généralement rester synchrones, car WordPress attend que la valeur filtrée soit renvoyée immédiatement.