자동화WP-Cron
WP-Cron
다음 액션 훅이 제공되며, WP-Cron 내에서 호출할 수 있습니다.
gatographql__execute_query
이 훅은 다음 매개변수를 받습니다(동일한 순서로):
| # | 필수 여부? | 매개변수 | 설명 |
|---|---|---|---|
| 1 | ✅ | $query | 실행할 GraphQL 쿼리 |
| 2 | ❌ | $variables | GraphQL 변수 |
| 3 | ❌ | $operationName | 실행할 오퍼레이션 이름 |
| 4 | ❌ | $executeAsUser | 쿼리를 실행하기 위해 로그인할 사용자 |
| 5 | ❌ | $schemaConfigurationIDOrSlug | 쿼리 실행 시 적용할 스키마 구성의 ID(int로 지정)또는 슬러그(string으로 지정). null을 전달하면 기본값이 사용되며, -1을 전달하면 「스키마 구성을 사용하지 않음」을 의미합니다 |
$executeAsUser 매개변수는 뮤테이션 실행 시처럼 쿼리가 로그인된 사용자를 필요로 하는 경우에 필요합니다:
- 제공된 경우, 지정된 ID(int로 지정)또는 사용자 이름(string으로 지정)의 사용자가 GraphQL 쿼리 실행 직전에 로그인하고, 실행 직후에 로그아웃합니다.
- 제공되지 않은 경우, 쿼리 실행 시 로그인된 사용자가 없습니다.
gatographql__execute_persisted_query
이 훅은 다음 매개변수를 받습니다(동일한 순서로):
| # | 필수 여부? | 매개변수 | 설명 |
|---|---|---|---|
| 1 | ✅ | $persistedQueryIDOrSlug | Persisted Query의 ID(int로 지정)또는 슬러그(string으로 지정) |
| 2 | ❌ | $variables | GraphQL 변수 |
| 3 | ❌ | $operationName | 실행할 오퍼레이션 이름 |
| 4 | ❌ | $executeAsUser | 쿼리를 실행하기 위해 로그인할 사용자 |
적용할 스키마 구성은 persisted query 내에서 이미 선택되어 있습니다.
예제
다음 WP-Cron 이벤트는 훅 gatographql__execute_persisted_query를 실행하여 사이트에 추가된 새 댓글 수를 나타내는 일일 이메일을 발송합니다:
- 지난 24시간
- 지난 1년
- 이번 달 시작일부터
- 올해 시작일부터
슬러그 "daily-stats-by-email-number-of-comments"의 Persisted Query를 다음 내용으로 생성합니다:
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
}
}다음으로, WP-Cron 이벤트를 PHP로 예약합니다:
\wp_schedule_event(
time(),
'daily',
'gatographql__execute_persisted_query',
[
'daily-stats-by-email-number-of-comments',
[
'to' => ['admin@yoursite.com']
],
'SendDailyStatsByEmailNumberOfComments',
1 // This is the admin user's ID
]
);또는 WP-Crontrol 플러그인을 사용합니다:
- 이벤트 유형: Standard cron event
- 훅 이름:
gatographql__execute_persisted_query - 인수:
["daily-stats-by-email-number-of-comments",{"to":["admin@yoursite.com"]},"SendDailyStatsByEmailNumberOfComments",1] - 반복 주기: Once Daily
