自动化配置工具
当网站发生某个事件时,自动执行 GraphQL Persisted Query。
自动化配置工具模块提供了一个「自动化器」用户界面,可通过 WordPress 编辑器创建自动化规则。
自动化触发器是任意 WordPress 动作钩子,而动作则是执行一个 GraphQL persisted query。
系统提供了自定义文章类型「自动化规则」用于创建自动化。新建条目时,需要配置以下内容:
- 自动化触发器
- 自动化动作

自动化动作
自动化动作指明将执行哪个 GraphQL persisted query。
请使用以下元素配置此项目:
Persisted Query:选择要执行的 GraphQL persisted query(从所有状态为 publish 或 private 的 query 中选择)。
静态 GraphQL 变量:以 JSON 字符串形式为 persisted query 中的 GraphQL 变量提供值。这些是静态值。
例如:
{
"emailSubject": "New post on the site"
}这些值会被「动态」GraphQL 变量覆盖(参见下方自动化触发器)。
操作名称(可选):如果 persisted query 包含多个操作,可以指定要执行的操作(默认为最后一个)。
以用户身份执行(可选):以特定用户的登录状态执行 GraphQL persisted query,需提供该用户的 slug。

自动化触发器
自动化触发器指明哪个 WordPress 动作钩子将触发 Persisted Query 的执行。可以提供多个触发器(例如:如果只想响应文章或页面的编辑操作,可以提供 edit_post_post 和 edit_post_page 两个钩子)。
请使用以下元素配置此项目:
钩子名称:WordPress 动作钩子的名称。
动态 GraphQL 变量:提供一个 JSON 字符串,将 GraphQL 变量映射到传递给钩子函数的参数。这些动态值将在运行时传递给 query。
JSON 字典必须以 GraphQL 变量名作为键,以动作钩子中参数的位置作为值。
例如,钩子 draft_post(来自文章状态转换)将 $post_id 作为第一个参数传入。下面的 JSON 表示 GraphQL 变量 $postID 将接收传递给钩子的 $post_id 的值:
{
"postID": 1
}(在此示例中,1 表示「draft_post 的第 1 个参数的值」。)
如果「动态」和「静态」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 钩子,以便更方便地捕获特定事件并实现自动化。
例如,创建、更新和删除 meta 值的钩子在触发时会将 meta 键包含在钩子名称中。这样,当为文章设置特色图片时,就可以通过钩子 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} (第 5 个参数还传递 string $post_type) |
updated_post_meta | gatographql:updated_post_meta:{$meta_key}gatographql:updated_post_meta:{$post_type}:{$meta_key} (第 5 个参数还传递 string $post_type) |
deleted_post_meta | gatographql:deleted_post_meta:{$meta_key}gatographql:deleted_post_meta:{$post_type}:{$meta_key} (第 5 个参数还传递 string $post_type) |
added_term_meta | gatographql:added_term_meta:{$meta_key}gatographql:added_term_meta:{$taxonomy}:{$meta_key} (第 5 个参数还传递 string $taxonomy) |
updated_term_meta | gatographql:updated_term_meta:{$meta_key}gatographql:updated_term_meta:{$taxonomy}:{$meta_key} (第 5 个参数还传递 string $taxonomy) |
deleted_term_meta | gatographql:deleted_term_meta:{$meta_key}gatographql:deleted_term_meta:{$taxonomy}:{$meta_key} (第 5 个参数还传递 string $taxonomy) |
调试问题
如果自动化未被执行,可能是自动化配置或 persisted query 执行存在错误。
执行日志
详情请参阅问题排查。
错误日志
所有配置问题(例如 GraphQL 变量的 JSON 字符串格式错误,或引用了已被删除的 persisted query)和执行错误(例如抛出异常,或 GraphQL query 中的 errors 条目)都会发送至 PHP 函数的 error_log,因此会输出到 WordPress 错误日志中。
这些错误日志均以字符串 [Gato GraphQL] 作为前缀。
使用示例
以下是一些使用场景:
- 使用 AI 为新文章创建特色图片
- 文章发布时自动添加必要的区块
- 文章更新时将所有图片来源和链接中的
http替换为https - 有新文章时向管理员发送邮件
- 评论收到回复时向该用户发送邮件
- 【多站点】将新文章翻译成不同语言,并将译文添加到各个站点
- 在外部服务上执行操作(例如:自动将新文章分享到 Facebook)
例如,当以 draft 状态创建新文章时,预定义自动化规则**「为新文章添加评论区块」**会检查 core/comments 区块是否存在,若不存在则将其添加到文章末尾:
