Тригери за действия
Queuety::on_action() ви позволява да превърнете обикновено действие WordPress в изпращане на устойчив работен процес.
Така получавате ясен мост:
WordPress action -> mapped payload -> durable workflow
Това е полезно, когато интересното събитие вече съществува в WordPress, а скъпият или продължителен отговор трябва да се изпълни асинхронно.
Пример: преглед на съдържание при запазване на публикация
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}",
);
В този пример:
save_postвсе още е първоначалното събитие WordPressmapпревръща суровите аргументи на хука в обикновено състояние на работния процесwhenпропуска нежеланите събития, преди да бъдат поставени на опашкаidempotency_keyне позволява повтарящи се извиквания на хука да изпращат дублирани изпълнения
Какво се изпълнява синхронно
Самата функция за обратно извикване на действието продължава да се изпълнява в текущата заявка WordPress.
Това означава, че следните части са синхронни:
whenmapidempotency_key
Само стъпките на работния процес се изпълняват асинхронно след изпращането.
Правила за полезния товар
Съпоставените полезни товари трябва да съдържат обикновени масиви, скаларни стойности и null.
Не предавайте сурови обекти WordPress като WP_Post директно в състоянието на работния процес. Първо ги нормализирайте в 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,
],
);
Ключове, започващи с _, се отхвърлят, защото имената са запазени за вътрешното състояние на работния процес.
Приети аргументи
WordPress изисква брой accepted_args при регистриране на функция за обратно извикване на действие.
Queuety го извежда по подразбиране от функциите ви за обратно извикване map, when и idempotency_key, така че обичайният случай не изисква допълнителна конфигурация:
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,
],
);
Ако е необходимо ръчно задаване, подайте изрично accepted_args:
Queuety::on_action(
'comment_post',
workflow: 'comment_review',
accepted_args: 2,
);
Вградени конструктори на работен процес
Можете да изпратите регистрирано име на работен процес или вграден WorkflowBuilder.
Вградените конструктори са полезни, когато специфичният за хука работен процес е дефиниран в същия файл за начална настройка:
$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}",
);
Кога това е подходящо
Използвайте тригери за действия, когато:
- WordPress вече излъчва събитието, което ви интересува
- отговорът трябва да издържа на изтичане на времето за заявката или рестартиране на работника
- последващата работа може да се разклонява, изчаква или да изисква одобрение
- повтарящите се извиквания на хука изискват устойчива идемпотентност
Вместо това използвайте директно извикване на Queuety::dispatch() или Queuety::workflow(), когато работата не е свързана с граница на събитие WordPress.
Не е за филтри
Queuety::on_action() умишлено е само за действия.
Филтрите са синхронни трансформации по време на заявката. Обикновено трябва да останат синхронни, защото WordPress очаква филтрираната стойност да бъде върната незабавно.