Schema-Tutorial
Schema-TutorialLektion 15: Senden einer täglichen Aktivitätszusammenfassung

Lektion 15: Senden einer täglichen Aktivitätszusammenfassung

Wir können Gato GraphQL mit WP-Cron integrieren, um die Ausführung von GraphQL-queries, die administrative Aufgaben erledigen, in einem bestimmten Zeitintervall zu automatisieren. (Die Erweiterung Automation ist erforderlich.)

In dieser Tutorial-Lektion richten wir WP-Cron so ein, dass alle 24 Stunden eine GraphQL-query ausgeführt wird, die die Anzahl neuer Kommentare auf der Website abruft und diese Statistiken an das gewünschte E-Mail-Konto sendet.

GraphQL-query mit täglichen Statistiken zu neuen Kommentaren

Diese GraphQL-query sendet eine E-Mail mit der Anzahl der neuen Kommentare, die in verschiedenen Zeiträumen zur Website hinzugefügt wurden:

  • In den letzten 24 Stunden
  • Im letzten Jahr
  • Seit Beginn des Monats
  • Seit Beginn des Jahres

Wir erstellen eine Persisted Query mit dem Slug "daily-stats-by-email-number-of-comments" und folgendem Inhalt:

query CountComments {
  DATE_ISO8601: _env(name: DATE_ISO8601) @remove
 
  timeToday: _time
  dateToday: _date(format: $__DATE_ISO8601, timestamp: $__timeToday)
  
  timeYesterday: _intSubtract(subtract: 86400, from: $__timeToday)
  dateYesterday: _date(format: $__DATE_ISO8601, timestamp: $__timeYesterday)
  
  time1YearAgo: _intSubtract(subtract: 31536000, from: $__timeToday)
  date1YearAgo: _date(format: $__DATE_ISO8601, timestamp: $__time1YearAgo)
 
  timeBegOfThisMonth: _makeTime(hour: 0, minute: 0, second: 0, day: 1)
  dateBegOfThisMonth: _date(format: $__DATE_ISO8601, timestamp: $__timeBegOfThisMonth)
 
  timeBegOfThisYear: _makeTime(hour: 0, minute: 0, second: 0, month: 1, day: 1)
  dateBegOfThisYear: _date(format: $__DATE_ISO8601, timestamp: $__timeBegOfThisYear)
  
  commentsAddedInLast24Hs: commentCount(filter: { dateQuery: { after: $__dateYesterday } } )
    @export(as: "commentsAddedInLast24Hs")
  commentsAddedInLast1Year: commentCount(filter: { dateQuery: { after: $__date1YearAgo } } )
    @export(as: "commentsAddedInLast1Year")
  commentsAddedSinceBegOfThisMonth: commentCount(filter: { dateQuery: { after: $__dateBegOfThisMonth } } )
    @export(as: "commentsAddedSinceBegOfThisMonth")
  commentsAddedSinceBegOfThisYear: commentCount(filter: { dateQuery: { after: $__dateBegOfThisYear } } )
    @export(as: "commentsAddedSinceBegOfThisYear")
}
 
query CreateEmailMessage @depends(on: "CountComments") {
  emailMessageTemplate: _strConvertMarkdownToHTML(
    text: """
 
This is the number of comments added to the site:
 
| Period | # Comments added |
| --- | --- |
| **In the last 24 hs**: | {$commentsAddedInLast24Hs} |
| **In the last 365 days**: | {$commentsAddedInLast1Year} |
| **Since begginning of this month**: | {$commentsAddedSinceBegOfThisMonth} |
| **Since begginning of this year**: | {$commentsAddedSinceBegOfThisYear} |
 
    """
  )
  emailMessage: _strReplaceMultiple(
    search: [
      "{$commentsAddedInLast24Hs}",
      "{$commentsAddedInLast1Year}",
      "{$commentsAddedSinceBegOfThisMonth}",
      "{$commentsAddedSinceBegOfThisYear}"
    ],
    replaceWith: [
      $commentsAddedInLast24Hs,
      $commentsAddedInLast1Year,
      $commentsAddedSinceBegOfThisMonth,
      $commentsAddedSinceBegOfThisYear
    ],
    in: $__emailMessageTemplate
  )
    @export(as: "emailMessage")
}
 
mutation SendDailyStatsByEmailNumberOfComments(
  $to: [String!]!
)
  @depends(on: "CreateEmailMessage")
{
  _sendEmail(
    input: {
      to: $to
      subject: "Daily stats: Number of new comments"
      messageAs: {
        html: $emailMessage
      }
    }
  ) {
    status
  }
}

Planung der Ausführung der GraphQL-query via WP-Cron

Wir müssen das WP-Cron-Ereignis so planen, dass es den Gato GraphQL-Hook gatographql__execute_persisted_query ausführt, und dabei die E-Mail-Adresse, an die die E-Mail gesendet werden soll, als Argument sowie die Wiederholung (täglich) übergibt.

Das können wir entweder per PHP tun:

wp_schedule_event(
  time(),
  'daily',
  'gatographql__execute_persisted_query',
  [
    'daily-stats-by-email-number-of-comments',
    [
      'to' => ['admin@mysite.com']
    ],
    'SendDailyStatsByEmailNumberOfComments',
    1 // This is the admin user's ID
  ]
);

Oder über das Plugin WP-Crontrol:

  • Event type: Standard cron event
  • Hook name: gatographql__execute_persisted_query
  • Arguments: ["daily-stats-by-email-number-of-comments",{"to":["admin@mysite.com"]},"SendDailyStatsByEmailNumberOfComments",1]
  • Recurrence: Once Daily
Neuer Eintrag in WP-Crontrol
Neuer Eintrag in WP-Crontrol

Das 4. Argument, das an das WP-Cron-Ereignis übergeben wird, ist die ID (als int) oder der Benutzername (als string) des Benutzers, der beim Ausführen der GraphQL-query eingeloggt sein muss.

(In diesem Fall ist der Wert 1 die ID des Admin-Benutzers; es wäre auch möglich gewesen, den Benutzernamen "admin" anzugeben.)

Die Übergabe dieses Arguments ist in der Regel erforderlich, wenn Mutationen ausgeführt werden, da die meisten davon einen eingeloggten Benutzer (mit den entsprechenden Berechtigungen) voraussetzen.