Tutorial dello schema
Tutorial dello schemaLezione 17: Aggiungere automaticamente un blocco obbligatorio

Lezione 17: Aggiungere automaticamente un blocco obbligatorio

Ogni volta che viene creato un nuovo post, possiamo usare le funzionalità di automazione per validare e modificare il contenuto del post.

La query in questa lezione del tutorial verifica se un determinato blocco obbligatorio è presente nel post e, se mancante, lo aggiunge.

Query GraphQL per aggiungere un blocco mancante

Affinché questa query GraphQL funzioni, la Configurazione dello schema applicata all'endpoint deve avere le Mutation Annidate abilitate

Questa query GraphQL verifica se il blocco obbligatorio wp:comments è già stato aggiunto al post. Se mancante, viene aggiunto in fondo al contenuto.

Salva questo contenuto come Persisted Query, con 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
      }
    }
  }
}

Aggiungere un hook per eseguire la Persisted Query

L'estensione Internal GraphQL Server applica per impostazione predefinita la Configurazione dello schema definita nelle proprie Impostazioni.

Quindi, affinché questa query GraphQL funzioni, la Configurazione dello schema applicata all'Internal GraphQL Server deve avere le Mutation Annidate abilitate.

Questo codice PHP si aggancia all'azione WordPress draft_post per eseguire la Persisted Query (tramite l'estensione 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'
    );
  }
);