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