Pelajaran 17: Menambahkan blok wajib secara otomatis
Setiap kali postingan baru dibuat, kita dapat menggunakan fitur otomasi untuk memvalidasi dan memodifikasi konten postingan.
Query dalam pelajaran tutorial ini memeriksa apakah blok wajib tertentu ada di postingan dan, jika tidak ada, menambahkannya.
GraphQL query untuk menambahkan blok yang hilang
Agar GraphQL query ini berfungsi, Konfigurasi Skema yang diterapkan pada endpoint harus mengaktifkan Nested Mutations
GraphQL query ini memeriksa apakah blok wajib wp:comments sudah ditambahkan ke postingan. Jika tidak ada, blok tersebut ditambahkan di bagian bawah konten.
Simpan konten ini sebagai Persisted Query, dengan 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
}
}
}
}Menambahkan hook untuk menjalankan Persisted Query
Internal GraphQL Server secara default menerapkan Konfigurasi Skema yang didefinisikan dalam Pengaturannya sendiri.
Oleh karena itu, agar GraphQL query ini berfungsi, Konfigurasi Skema yang diterapkan pada Internal GraphQL Server harus mengaktifkan Nested Mutations.
Kode PHP ini menghubungkan ke action WordPress draft_post untuk menjalankan Persisted Query (melalui ekstensi 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'
);
}
);