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'
);
}
);