Hướng dẫn schema
Hướng dẫn schemaBài học 17: Tự động thêm một block bắt buộc

Bài học 17: Tự động thêm một block bắt buộc

Mỗi khi một bài đăng mới được tạo, chúng ta có thể sử dụng các tính năng tự động hóa để xác thực và sửa đổi nội dung của bài đăng.

Query trong bài học hướng dẫn này kiểm tra xem một block bắt buộc nhất định có trong bài đăng hay không và, nếu thiếu, sẽ thêm nó vào.

GraphQL query để thêm một block còn thiếu

Để GraphQL query này hoạt động, Cấu hình Schema được áp dụng cho endpoint cần có Nested Mutations được bật

GraphQL query này kiểm tra xem block bắt buộc wp:comments đã được thêm vào bài đăng chưa. Nếu thiếu, nó sẽ được thêm vào cuối nội dung.

Lưu nội dung này dưới dạng Persisted Query, với slug insert-mandatory-comments-block-if-missing:

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
      }
    }
  }
}

Thêm hook để thực thi Persisted Query

Extension Internal GraphQL Server theo mặc định áp dụng Cấu hình Schema được định nghĩa trong Cài đặt của chính nó.

Do đó, để GraphQL query này hoạt động, Cấu hình Schema được áp dụng cho Internal GraphQL Server cần có Nested Mutations được bật.

Đoạn mã PHP này móc vào action WordPress draft_post để thực thi Persisted Query (thông qua extension Internal GraphQL Server):

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'
    );
  }
);