Библиотека queries
Библиотека queriesОтправить письмо подписчикам с уведомлением о новой записи

Отправить письмо подписчикам с уведомлением о новой записи

Этот запрос отправляет письмо всем пользователям с уведомлением о создании новой записи на сайте.

Он включает возможность выбора пользователей, подписавшихся на список рассылки, однако эта часть запроса закомментирована. (Раскомментируйте её при необходимости.) Подписанные пользователи — это те, у кого есть мета email_list со значением new_posts.

Этот запрос требует, чтобы у endpoint были включены Вложенные мутации.

query GetPostAndExportData($postId: ID!) {
  post(by: { id: $postId }) {
    content @export(as: "postContent")
    title @export(as: "postTitle")
    url @export(as: "postURL")
  }
 
  hasPost: _notNull(value: $__post)
    @export(as: "doSendEmail")
}
 
query GetEmailData
  @depends(on: "GetPostAndExportData")
  @include(if: $doSendEmail)
{ 
  siteName: optionValue(name: "blogname")
    @export(as: "siteName")
 
  emailSubject: _sprintf(
    string: "There is a new post: \"%s\"",
    values: [$postTitle]
  )
    @export(as: "emailSubject")
}
 
mutation SendEmailToUsersAboutNewPost
  @depends(on: "GetEmailData")
  @include(if: $doSendEmail)
{
  users
  # # Retrieve only users subscribed to an email list (uncomment if needed)
  # (
  #   filter: {
  #     metaQuery: {
  #       key: "email_list",
  #       compareBy: {
  #         arrayValue: {
  #           value: "new_posts",
  #           operator: IN
  #         }
  #       }
  #     }
  #   }
  # )
  {
    displayName
    email
 
    emailMessageTemplate: _strConvertMarkdownToHTML(
      text: """
 
Hi {$userDisplayName},
 
There is a new post on the **{$siteName}** website:
 
[**{$postTitle}**]({$postURL})
 
{$postContent}
  
      """
    )
      @remove
    emailMessage: _strReplaceMultiple(
      search: ["{$userDisplayName}", "{$siteName}", "{$postTitle}", "{$postContent}", "{$postURL}"],
      replaceWith: [$__displayName, $siteName, $postTitle, $postContent, $postURL],
      in: $__emailMessageTemplate
    )
      @remove
 
    _sendEmail(
      input: {
        to: $__email
        subject: $emailSubject
        messageAs: {
          html: $__emailMessage
        }
      }
    ) {
      status
      errors {
        __typename
        ...on ErrorPayload {
          message
        }
      }
    }
  }
}