WordPressの管理
WordPressの管理タスクの自動化

タスクの自動化

サイトで何らかのイベントが発生したときに、GraphQL Persisted Query を自動的に実行します。

WordPress エディターから直接オートメーションを作成できます。オートメーションのトリガーは任意の WordPress アクションフック、アクションは GraphQL Persisted Query の実行です。

すべてのオートメーションルールにアクセスする

プラグインのメニューで「Automation Rules」をクリックすると、作成済みのオートメーションルール一覧が表示されます。

オートメーションルール
オートメーションルール

新しいオートメーションルールを作成する

「Add New Automation Rule」をクリックして新しいエントリを追加します。

エディター画面では、以下の設定を行う必要があります。

  • オートメーショントリガー
  • オートメーションアクション
オートメーションルールエディター
オートメーションルールエディター

オートメーションアクション

オートメーションアクションは、どの GraphQL Persisted Query を実行するかを指定します。

このアイテムを以下の要素で設定します。

Persisted Query: 実行する GraphQL Persisted Query を選択します(ステータスが publish または private のものの中から選択)

Static GraphQL Variables: Persisted Query 内の GraphQL 変数に対して値を提供する JSON 文字列を指定します。これらは静的な値です。

例:

{
  "emailSubject": "New post on the site"
}

これらの値は「動的」な GraphQL 変数によって上書きされます(下記の オートメーショントリガー を参照)。

Operation name(任意): Persisted Query に複数のオペレーションが含まれている場合、実行するオペレーションを指定できます(デフォルトは最後のもの)。

Execute as user(任意): ユーザースラッグを指定して、特定のユーザーとしてログインした状態で GraphQL Persisted Query を実行します。

オートメーションルール - Persisted Query の実行
オートメーションルール - Persisted Query の実行

オートメーショントリガー

オートメーショントリガーは、どの WordPress アクションフックが Persisted Query の実行をトリガーするかを指定します。複数指定することも可能です(例:投稿またはページの編集にのみ反応するには、edit_post_postedit_post_page の両フックを指定できます)。

このアイテムを以下の要素で設定します。

Hook name: WordPress アクションフックの名前。

Dynamic GraphQL Variables: GraphQL 変数をフック関数に渡された引数にマッピングする JSON 文字列を指定します。これらの動的な値は実行時にクエリに提供されます。

JSON 辞書には、GraphQL 変数名をキー、アクションフックの引数の位置を値として指定する必要があります。

例えば、draft_post フック(post status transitions より)は最初の引数として $post_id を提供します。以下の JSON は、GraphQL 変数 $postID がフックに渡された $post_id の値を受け取ることを示しています。

{
  "postID": 1
}

(この例では、1 は「draft_post による第1引数の値」を意味します。)

「動的」と「静的」の GraphQL 変数(上記の オートメーションアクション を参照)に同じキーが使用されている場合、動的な値が優先されます。

オートメーションルール - アクションフック
オートメーションルール - アクションフック

WordPress フックのマッピング

Automation Configurator で直接使用できない 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_any
gatographql:{$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_termgatographql:created_term:{$taxonomy}
set_object_termsgatographql:set_object_terms:{$taxonomy}
gatographql:updated_object_terms:{$taxonomy} (新旧タームに差分がある場合)
added_post_metagatographql:added_post_meta:{$meta_key}
gatographql:added_post_meta:{$post_type}:{$meta_key} (第5引数として string $post_type も渡す)
updated_post_metagatographql:updated_post_meta:{$meta_key}
gatographql:updated_post_meta:{$post_type}:{$meta_key} (第5引数として string $post_type も渡す)
deleted_post_metagatographql:deleted_post_meta:{$meta_key}
gatographql:deleted_post_meta:{$post_type}:{$meta_key} (第5引数として string $post_type も渡す)
added_term_metagatographql:added_term_meta:{$meta_key}
gatographql:added_term_meta:{$taxonomy}:{$meta_key} (第5引数として string $taxonomy も渡す)
updated_term_metagatographql:updated_term_meta:{$meta_key}
gatographql:updated_term_meta:{$taxonomy}:{$meta_key} (第5引数として string $taxonomy も渡す)
deleted_term_metagatographql: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] が先頭に付与されます。