Saltar al contenido

Activadores de acciones

Queuety::on_action() permite convertir una acción normal de WordPress en el inicio de un flujo de trabajo duradero.

Esto crea un puente sencillo:

WordPress action -> mapped payload -> durable workflow

Resulta útil cuando el evento que importa ya existe en WordPress y la respuesta costosa o de larga duración debe ejecutarse de forma asíncrona.

Ejemplo: revisar el contenido al guardar una entrada

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}",
);

En ese ejemplo:

  • save_post sigue siendo el evento WordPress original
  • map convierte los argumentos sin procesar del hook en un estado de flujo de trabajo simple
  • when omite los eventos no deseados antes de poner nada en cola
  • idempotency_key evita que las activaciones repetidas del hook inicien ejecuciones duplicadas

Qué se ejecuta de forma síncrona

La propia función de retorno de llamada de la acción sigue ejecutándose dentro de la solicitud actual de WordPress.

Eso significa que estas partes son síncronas:

  • when
  • map
  • idempotency_key

Solo los pasos del flujo de trabajo se ejecutan de forma asíncrona después del envío.

Reglas de la carga útil

Las cargas útiles asignadas deben contener matrices simples, escalares y null.

No pase objetos WordPress sin procesar como WP_Post directamente al estado del flujo de trabajo. Normalícelos primero dentro de 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,
    ],
);

Se rechazan las claves que empiezan por _ porque esos nombres están reservados para el estado interno del flujo de trabajo.

Argumentos aceptados

WordPress requiere un recuento de accepted_args al registrar una función de retorno de llamada de una acción.

De forma predeterminada, Queuety lo deduce de sus funciones de retorno de llamada map, when y idempotency_key, así que el caso habitual no requiere configuración adicional:

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 necesita anularlo manualmente, pase accepted_args explícitamente:

PHP
Queuety::on_action(
    'comment_post',
    workflow: 'comment_review',
    accepted_args: 2,
);

Creadores de flujos de trabajo en línea

Puede enviar el nombre de un flujo de trabajo registrado o un WorkflowBuilder en línea.

Los creadores en línea son útiles cuando el flujo de trabajo específico del hook se define en el mismo archivo de arranque:

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}",
);

Cuándo conviene usarlo

Use activadores de acciones cuando:

  • WordPress ya emite el evento que le interesa
  • la respuesta debe sobrevivir a los tiempos de espera agotados de las solicitudes o a los reinicios de los procesos de trabajo
  • el trabajo posterior puede bifurcarse, esperar o requerir aprobación
  • las activaciones duplicadas del hook requieren idempotencia duradera

Use una llamada directa a Queuety::dispatch() o Queuety::workflow() cuando el trabajo no esté vinculado a un límite de evento de WordPress.

No se aplica a filtros

Queuety::on_action() está diseñado intencionadamente solo para acciones.

Los filtros son transformaciones síncronas durante la solicitud. Por lo general, deben seguir siendo síncronos, porque WordPress espera que el valor filtrado se devuelva de inmediato.