Tutorial skema
Tutorial skemaPelajaran 17: Menambahkan blok wajib secara otomatis

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