Tutorial del esquema
Tutorial del esquemaLección 17: Añadir automáticamente un bloque obligatorio

Lección 17: Añadir automáticamente un bloque obligatorio

Siempre que se crea una nueva entrada, podemos usar las funciones de automatización para validar y modificar su contenido.

La consulta de esta lección del tutorial comprueba si un cierto bloque obligatorio está presente en la entrada y, si falta, lo añade.

Consulta GraphQL para añadir un bloque que falta

Para que esta consulta GraphQL funcione, la Creando una configuración del esquema aplicada al endpoint debe tener habilitadas las Usar mutaciones anidadas

Esta consulta GraphQL comprueba si el bloque obligatorio wp:comments ya se ha añadido a la entrada. Si falta, se añade al final del contenido.

Guarda este contenido como una Persisted Query, con el 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
      }
    }
  }
}

Añadir un hook para ejecutar la Persisted Query

La extensión Internal GraphQL Server aplica por defecto la Schema Configuration definida en sus propios Ajustes.

Por tanto, para que esta consulta GraphQL funcione, la Creando una configuración del esquema aplicada al Internal GraphQL Server debe tener habilitadas las Usar mutaciones anidadas.

Este código PHP se engancha a la acción de WordPress draft_post para ejecutar la Persisted Query (a través de la extensión 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'
    );
  }
);