Lekcja 17: Automatyczne dodawanie obowiązkowego bloku
Za każdym razem, gdy tworzony jest nowy post, możemy użyć funkcji automatyzacji, aby zweryfikować i zmodyfikować treść posta.
Query w tej lekcji samouczka sprawdza, czy dany obowiązkowy blok jest obecny w poście i, gdy go brakuje, dodaje go.
Query GraphQL do dodawania brakującego bloku
Aby ta query GraphQL działała, Konfiguracja schematu zastosowana do endpointu musi mieć włączone Zagnieżdżone mutacje
Ta query GraphQL sprawdza, czy obowiązkowy blok wp:comments został już dodany do posta. Jeśli go brakuje, jest on dodawany na końcu treści.
Zapisz tę treść jako Persisted Query ze slugiem 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
}
}
}
}Dodawanie hooka do wykonywania Persisted Query
Internal GraphQL Server domyślnie stosuje Konfigurację schematu zdefiniowaną we własnych Ustawieniach.
Dlatego, aby ta query GraphQL działała, Konfiguracja schematu zastosowana do Internal GraphQL Server musi mieć włączone Zagnieżdżone mutacje.
Ten kod PHP podłącza się do akcji WordPress draft_post, aby wykonać Persisted Query (za pośrednictwem rozszerzenia 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'
);
}
);