Aller au contenu

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

PHP
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_post reste l’événement WordPress d’origine
  • map transforme les arguments bruts du hook en état de workflow simple
  • when ignore les événements indésirables avant leur mise en file d’attente
  • idempotency_key empê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 :

  • when
  • map
  • idempotency_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() :

PHP
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 :

PHP
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 :

PHP
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 :

PHP
$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.