Schema-tutorial
Schema-tutorialLes 17: Automatisch toevoegen van een verplicht blok

Les 17: Automatisch toevoegen van een verplicht blok

Telkens wanneer een nieuw bericht wordt aangemaakt, kunnen we de automatiseringsfuncties gebruiken om de inhoud van het bericht te valideren en aan te passen.

De query in deze tutorialles controleert of een bepaald verplicht blok aanwezig is in het bericht en voegt het toe wanneer het ontbreekt.

GraphQL query om een ontbrekend blok toe te voegen

Om deze GraphQL query te laten werken, moet de Schemaconfiguratie die op het endpoint is toegepast Geneste mutaties hebben ingeschakeld

Deze GraphQL query controleert of het verplichte blok wp:comments al aan het bericht is toegevoegd. Als het ontbreekt, wordt het onderaan de inhoud toegevoegd.

Sla deze inhoud op als een Persisted Query met 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
      }
    }
  }
}

Hook toevoegen om Persisted Query uit te voeren

De Internal GraphQL Server past standaard de Schemaconfiguratie toe die is gedefinieerd in de eigen Instellingen.

Daarom moet de Schemaconfiguratie die op de Internal GraphQL Server is toegepast Geneste mutaties hebben ingeschakeld om deze GraphQL query te laten werken.

Deze PHP-code koppelt aan de WordPress-actie draft_post om de Persisted Query uit te voeren (via de extensie 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'
    );
  }
);