Pelajaran 15: Mengirim ringkasan aktivitas harian
Kita dapat mengintegrasikan Gato GraphQL dengan WP-Cron, untuk mengotomatiskan eksekusi query GraphQL yang melakukan tugas admin, dengan interval waktu tertentu. (Ekstensi Automation diperlukan.)
Dalam pelajaran tutorial ini, kita mengatur WP-Cron untuk, setiap 24 jam, mengeksekusi query GraphQL yang mengambil jumlah komentar baru yang ditambahkan ke situs, dan mengirimkan statistik tersebut ke akun email yang diinginkan.
Query GraphQL dengan statistik harian komentar baru
Query GraphQL ini mengirimkan email yang menunjukkan jumlah komentar baru yang ditambahkan ke situs untuk beberapa periode waktu:
- Dalam 24 jam terakhir
- Dalam 1 tahun terakhir
- Sejak awal bulan ini
- Sejak awal tahun ini
Kita membuat Persisted Query dengan slug "daily-stats-by-email-number-of-comments" dan konten:
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
}
}Menjadwalkan eksekusi query GraphQL melalui WP-Cron
Kita harus menjadwalkan event WP-Cron untuk mengeksekusi hook Gato GraphQL gatographql__execute_persisted_query, dengan meneruskan email tujuan pengiriman sebagai argumen, dan recurrence (harian).
Kita melakukan ini melalui PHP:
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
]
);Atau melalui 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

Argumen ke-4 yang diteruskan ke event WP-Cron adalah ID (sebagai int) atau username (sebagai string) dari pengguna yang harus masuk (logged-in) saat mengeksekusi query GraphQL.
(Dalam hal ini, nilai 1 adalah ID pengguna admin, dan bisa juga menggunakan username "admin".)
Meneruskan argumen ini biasanya diperlukan saat mengeksekusi mutation, karena sebagian besar dari mutation tersebut mengharuskan pengguna (dengan kemampuan yang sesuai) untuk masuk terlebih dahulu.