スキーマチュートリアル
スキーマチュートリアルレッスン17:必須ブロックの自動追加

レッスン17:必須ブロックの自動追加

新しい投稿が作成されるたびに、オートメーション機能を使用して投稿のコンテンツを検証・修正できます。

このチュートリアルレッスンのクエリは、特定の必須ブロックが投稿に存在するかどうかを確認し、存在しない場合はそれを追加します。

不足しているブロックを追加するGraphQLクエリ

このGraphQLクエリを機能させるには、エンドポイントに適用されるスキーマ設定ネストされたミューテーションが有効になっている必要があります。

このGraphQLクエリは、必須ブロック wp:comments がすでに投稿に追加されているかどうかを確認します。存在しない場合は、コンテンツの末尾に追加されます。

このコンテンツをスラッグ insert-mandatory-comments-block-if-missing でPersisted Queryとして保存してください。

query CheckIfCommentsBlockExists($postId: ID!) {
  posts(
    filter: {
      ids: [$postId]
      search: "\"<!-- /wp:comments -->\""
    }
  ) {
    id
  }
  blockExists: _notEmpty(value: $__posts)
    @export(as: "blockExists")
}
 
mutation MaybeInsertCommentsBlock($postId: ID!)
  @depends(on: "CheckIfCommentsBlockExists")
  @skip(if: $blockExists)
{
  post(by: { id: $postId }) {
    id
    rawContent
    adaptedRawContent: _strAppend(
      after: $__rawContent
      append: """
 
<!-- wp:comments -->
<div class="wp-block-comments"><!-- wp:comments-title /-->
 
<!-- wp:comment-template -->
<!-- wp:columns -->
<div class="wp-block-columns"><!-- wp:column {"width":"40px"} -->
<div class="wp-block-column" style="flex-basis:40px"><!-- wp:avatar {"size":40,"style":{"border":{"radius":"20px"}}} /--></div>
<!-- /wp:column -->
 
<!-- wp:column -->
<div class="wp-block-column"><!-- wp:comment-author-name {"fontSize":"small"} /-->
 
<!-- wp:group {"style":{"spacing":{"margin":{"top":"0px","bottom":"0px"}}},"layout":{"type":"flex"}} -->
<div class="wp-block-group" style="margin-top:0px;margin-bottom:0px"><!-- wp:comment-date {"fontSize":"small"} /-->
 
<!-- wp:comment-edit-link {"fontSize":"small"} /--></div>
<!-- /wp:group -->
 
<!-- wp:comment-content /-->
 
<!-- wp:comment-reply-link {"fontSize":"small"} /--></div>
<!-- /wp:column --></div>
<!-- /wp:columns -->
<!-- /wp:comment-template -->
 
<!-- wp:comments-pagination -->
<!-- wp:comments-pagination-previous /-->
 
<!-- wp:comments-pagination-numbers /-->
 
<!-- wp:comments-pagination-next /-->
<!-- /wp:comments-pagination -->
 
<!-- wp:post-comments-form /--></div>
<!-- /wp:comments -->   
 
      """
    )
    update(input: {
      contentAs: { html: $__adaptedRawContent },
    }) {
      status
      errors {
        __typename
        ...on ErrorPayload {
          message
        }
      }
      post {
        id
        rawContent
      }
    }
  }
}

Persisted Queryを実行するフックの追加

Internal GraphQL Server はデフォルトで、独自の設定で定義されたスキーマ設定を適用します。

そのため、このGraphQLクエリを機能させるには、Internal GraphQL Server に適用されるスキーマ設定ネストされたミューテーションが有効になっている必要があります。

このPHPコードはWordPressのアクション draft_post にフックして、(Internal GraphQL Server 拡張機能を介して)Persisted Queryを実行します。

use GatoGraphQL\InternalGraphQLServer\GraphQLServer;
use WP_Post;
 
add_action(
  'draft_post',
  function (int $postID): void {
    GraphQLServer::executePersistedQuery(
      'insert-mandatory-comments-block-if-missing',
      [
        'postId' => $postID,
      ],
      'MaybeInsertCommentsBlock'
    );
  }
);