Конфигуратор автоматизации
Автоматически выполняет GraphQL Persisted Query при наступлении какого-либо события на сайте.
Модуль Конфигуратор автоматизации предоставляет пользовательский интерфейс «автоматизатора» для создания автоматизаций через редактор WordPress.
Триггером автоматизации является любой action hook WordPress, а действием — выполнение GraphQL persisted query.
Для создания автоматизаций предусмотрен Custom Post Type «Правила автоматизации». При создании новой записи необходимо задать конфигурацию для:
- Триггер(ы) автоматизации
- Действие автоматизации

Действие автоматизации
Действие автоматизации указывает, какая GraphQL persisted query будет выполнена.
Настройте этот элемент со следующими полями:
Persisted Query: Выберите, какую GraphQL persisted query выполнить (из всех со статусом publish или private).
Статические переменные GraphQL: Укажите строку JSON со значениями для переменных GraphQL в persisted query. Это статические значения.
Например:
{
"emailSubject": "New post on the site"
}Эти значения переопределяются «динамическими» переменными GraphQL (см. Триггер(ы) автоматизации ниже).
Название операции (необязательно): Если persisted query содержит более одной операции, можно указать, какую из них выполнить (по умолчанию — последнюю).
Выполнить от имени пользователя (необязательно): Выполняет GraphQL persisted query, будучи авторизованным как конкретный пользователь; укажите slug пользователя.

Триггер(ы) автоматизации
Триггер автоматизации указывает, какой action hook WordPress инициирует выполнение Persisted Query. Можно указать более одного (например: чтобы реагировать только на редактирование записи или страницы, можно указать хуки edit_post_post и edit_post_page).
Настройте этот элемент со следующими полями:
Название хука: Название action hook WordPress.
Динамические переменные GraphQL: Укажите строку JSON, сопоставляющую переменные GraphQL с аргументами, передаваемыми в функцию хука. Эти динамические значения затем будут переданы в запрос во время выполнения.
Словарь JSON должен содержать имя переменной GraphQL в качестве ключа и позицию аргумента в action hook в качестве значения.
Например, хук draft_post (из переходов статусов записей) передаёт $post_id как первый аргумент. Тогда следующий JSON указывает, что переменная GraphQL $postID получит значение $post_id, переданного в хук:
{
"postID": 1
}(В этом примере 1 означает «значение 1-го аргумента draft_post».)
Если один и тот же ключ используется для «динамических» и «статических» переменных GraphQL (см. Действие автоматизации выше), динамические значения имеют приоритет.

Маппинг хуков WordPress
Существуют хуки WordPress, которые нельзя использовать непосредственно в Конфигураторе автоматизации, поскольку они передают PHP-объект через хук, который нельзя передать в качестве переменной GraphQL.
Несколько таких хуков были сопоставлены Gato GraphQL: запускается новый хук с префиксом gatographql: и тем же именем хука, а соответствующий ID объекта передаётся как переменная, которую можно использовать в качестве переменной GraphQL.
Например, хук WordPress draft_to_publish передаёт $post как переменную (типа WP_Post). Gato GraphQL сопоставляет этот хук как gatographql:draft_to_publish и передаёт $postId (типа int) как переменную.
В следующей таблице перечислены сопоставленные хуки WordPress:
| Хук WordPress | Сопоставленный хук Gato GraphQL |
|---|---|
{$old_status}_to_{$new_status} (передаёт WP_Post $post) | gatographql:{$old_status}_to_{$new_status} (передаёт int $postId, string $postType) |
Кроме того, Gato GraphQL повторно запускает несколько хуков WordPress с дополнительной информацией в имени хука, чтобы упростить отслеживание и автоматизацию конкретных событий.
Например, хуки, создающие, обновляющие и удаляющие мета-значения, запускаются с включением мета-ключа в имя хука. Тогда автоматизация может быть запущена при назначении миниатюры записи — по хуку gatographql:added_post_meta:_thumbnail_id.
Ниже приведены дополнительные хуки Gato GraphQL:
| Исходный хук WordPress | Запускаемый хук Gato GraphQL |
|---|---|
{$old_status}_to_{$new_status}(Передаёт WP_Post $post) | gatographql:any_to_{$new_status}gatographql:{$old_status}_to_anygatographql:{$old_status}_to_{$new_status}:{$post_type}gatographql:any_to_{$new_status}:{$post_type}gatographql:{$old_status}_to_any:{$post_type}(Все передают int $postId, string $postType) |
created_term | gatographql:created_term:{$taxonomy} |
set_object_terms | gatographql:set_object_terms:{$taxonomy}gatographql:updated_object_terms:{$taxonomy} (Когда есть разница между старыми и новыми термами) |
added_post_meta | gatographql:added_post_meta:{$meta_key}gatographql:added_post_meta:{$post_type}:{$meta_key} (Также передаёт string $post_type как 5-й параметр) |
updated_post_meta | gatographql:updated_post_meta:{$meta_key}gatographql:updated_post_meta:{$post_type}:{$meta_key} (Также передаёт string $post_type как 5-й параметр) |
deleted_post_meta | gatographql:deleted_post_meta:{$meta_key}gatographql:deleted_post_meta:{$post_type}:{$meta_key} (Также передаёт string $post_type как 5-й параметр) |
added_term_meta | gatographql:added_term_meta:{$meta_key}gatographql:added_term_meta:{$taxonomy}:{$meta_key} (Также передаёт string $taxonomy как 5-й параметр) |
updated_term_meta | gatographql:updated_term_meta:{$meta_key}gatographql:updated_term_meta:{$taxonomy}:{$meta_key} (Также передаёт string $taxonomy как 5-й параметр) |
deleted_term_meta | gatographql:deleted_term_meta:{$meta_key}gatographql:deleted_term_meta:{$taxonomy}:{$meta_key} (Также передаёт string $taxonomy как 5-й параметр) |
Отладка проблем
Если автоматизация не была выполнена, возможно, имеется ошибка в конфигурации автоматизации или при выполнении persisted query.
Журналы выполнения
Подробнее см. в разделе Устранение неполадок.
Журналы ошибок
Все проблемы с конфигурацией (например, некорректная строка JSON для переменных GraphQL или ссылка на удалённую persisted query) и ошибки выполнения (например, выброшенные исключения или записи errors в GraphQL запросе) передаются в функцию PHP error_log, поэтому они отображаются в журнале ошибок WordPress.
Эти записи журнала ошибок имеют префикс [Gato GraphQL].
Примеры
Вот несколько примеров того, как это можно использовать:
- Создание миниатюры для новых записей с помощью ИИ
- Добавление обязательного блока к записи при публикации
- Замена
httpнаhttpsво всех источниках изображений и ссылках при обновлении записи - Отправка письма администратору при появлении новой записи
- Отправка письма пользователю, чей комментарий получил новый ответ
- [Мультисайт] Перевод новой записи на разные языки и добавление переведённых записей на каждый сайт
- Выполнение действия во внешнем сервисе (например: автоматическая публикация новых записей в Facebook)
Например, при создании новой записи со статусом draft предустановленное правило автоматизации Добавить блок комментариев к новой записи проверяет наличие блока core/comments и, если он отсутствует, добавляет его в конец записи:
