オートメーション設定ツール
サイトで何らかのイベントが発生したとき、GraphQL Persisted Queryを自動的に実行します。
オートメーション設定ツールモジュールは「オートメーター」ユーザーインターフェースを提供し、WordPressエディターを使ってオートメーションを作成できます。
オートメーションのトリガーはWordPressのアクションフックであり、アクションはGraphQL persisted queryの実行です。
オートメーションを作成するために、カスタム投稿タイプ「オートメーションルール」が用意されています。新しいエントリを作成する際には、以下の設定を行う必要があります:
- オートメーショントリガー
- オートメーションアクション

オートメーションアクション
オートメーションアクションは、どのGraphQL persisted queryが実行されるかを示します。
このアイテムを以下の要素で設定します:
Persisted Query: 実行するGraphQL persisted queryを選択します(ステータスがpublishまたはprivateのものすべての中から選択)。
静的GraphQL変数: persisted queryのGraphQL変数に対する値をJSON文字列で指定します。これらは静的な値です。
例:
{
"emailSubject": "New post on the site"
}これらの値は「動的」GraphQL変数によって上書きされます(以下のオートメーショントリガーを参照)。
オペレーション名(任意): persisted queryに複数のオペレーションが含まれている場合、実行するオペレーションを指定できます(デフォルトは最後のオペレーション)。
ユーザーとして実行(任意): 特定のユーザーとしてログインした状態でGraphQL persisted queryを実行します。ユーザースラッグを指定してください。

オートメーショントリガー
オートメーショントリガーは、どのWordPressアクションフックがPersisted Queryの実行をトリガーするかを示します。複数指定することもできます(例:投稿またはページの編集にのみ反応するには、edit_post_postとedit_post_pageのフックを指定します)。
このアイテムを以下の要素で設定します:
フック名: WordPressアクションフックの名前。
動的GraphQL変数: GraphQL変数をフック関数に渡される引数にマッピングするJSON文字列を指定します。これらの動的な値は実行時にクエリに渡されます。
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:というプレフィックスと同じフック名を持つ新しいフックをトリガーし、GraphQL変数として入力できる対応するオブジェクトIDを変数として渡します。
例えば、WordPressフックdraft_to_publishは(WP_Post型の)$postを変数として渡します。Gato GraphQLはこのフックをgatographql:draft_to_publishとしてマッピングし、(int型の)$postIdを変数として渡します。
次の表は、マッピングされた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} (第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クエリのerrorsエントリなど)はPHP関数のerror_logに送信されるため、WordPressエラーログに出力されます。
これらのエラーログには[Gato GraphQL]という文字列がプレフィックスとして付きます。
使用例
以下はいくつかの使用例です:
- AIを使って新しい投稿のアイキャッチ画像を作成する
- 投稿が公開されたときに必須ブロックを追加する
- 投稿が更新されたときにすべての画像ソースとリンクの
httpをhttpsに置き換える - 新しい投稿があったときに管理者にメールを送信する
- コメントに返信があったユーザーにメールを送信する
- 【マルチサイト】新しい投稿を異なる言語に翻訳し、翻訳された投稿を各サイトに追加する
- 外部サービスでアクションを実行する(例:新しい投稿をFacebookに自動共有する)
例えば、draftステータスで新しい投稿を作成する際、定義済みオートメーションルール**「新しい投稿にコメントブロックを追加」**はcore/commentsブロックが存在するかどうかを確認し、存在しない場合は投稿の末尾に追加します:
