Tutoriel du schéma
Tutoriel du schémaLeçon 17 : Ajouter automatiquement un bloc obligatoire

Leçon 17 : Ajouter automatiquement un bloc obligatoire

Chaque fois qu'un nouvel article est créé, nous pouvons utiliser les fonctionnalités d'automatisation pour valider et modifier son contenu.

La requête de cette leçon du tutoriel vérifie si un certain bloc obligatoire est présent dans l'article et, s'il est absent, l'ajoute.

Requête GraphQL pour ajouter un bloc manquant

Pour que cette requête GraphQL fonctionne, la Configuration du schéma appliquée à l'endpoint doit avoir les Mutations Imbriquées activées

Cette requête GraphQL vérifie si le bloc obligatoire wp:comments a déjà été ajouté à l'article. S'il est absent, il est ajouté en bas du contenu.

Enregistrez ce contenu en tant que Persisted Query, avec le 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
      }
    }
  }
}

Ajouter un hook pour exécuter la Persisted Query

L'extension Internal GraphQL Server applique par défaut la Configuration du schéma définie dans ses propres Réglages.

Par conséquent, pour que cette requête GraphQL fonctionne, la Configuration du schéma appliquée à l'Internal GraphQL Server doit avoir les Mutations Imbriquées activées.

Ce code PHP se connecte à l'action WordPress draft_post pour exécuter la Persisted Query (via l'extension 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'
    );
  }
);