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