Samouczek schematu
Samouczek schematuLekcja 17: Automatyczne dodawanie obowiązkowego bloku

Lekcja 17: Automatyczne dodawanie obowiązkowego bloku

Za każdym razem, gdy tworzony jest nowy post, możemy użyć funkcji automatyzacji, aby zweryfikować i zmodyfikować treść posta.

Query w tej lekcji samouczka sprawdza, czy dany obowiązkowy blok jest obecny w poście i, gdy go brakuje, dodaje go.

Query GraphQL do dodawania brakującego bloku

Aby ta query GraphQL działała, Konfiguracja schematu zastosowana do endpointu musi mieć włączone Zagnieżdżone mutacje

Ta query GraphQL sprawdza, czy obowiązkowy blok wp:comments został już dodany do posta. Jeśli go brakuje, jest on dodawany na końcu treści.

Zapisz tę treść jako Persisted Query ze slugiem 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
      }
    }
  }
}

Dodawanie hooka do wykonywania Persisted Query

Internal GraphQL Server domyślnie stosuje Konfigurację schematu zdefiniowaną we własnych Ustawieniach.

Dlatego, aby ta query GraphQL działała, Konfiguracja schematu zastosowana do Internal GraphQL Server musi mieć włączone Zagnieżdżone mutacje.

Ten kod PHP podłącza się do akcji WordPress draft_post, aby wykonać Persisted Query (za pośrednictwem rozszerzenia 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'
    );
  }
);