Lezione 2: Interrogare dati dinamici
Gato GraphQL può ulteriormente ampliare le capacità di WordPress per la ricerca di dati tramite l'utilizzo di campi "funzione" (un tipo distinto di campo che fornisce funzionalità invece di dati), permettendoci di calcolare dati in modo dinamico, reinserirli nella query e influenzare la risposta con un controllo granulare.
Esempi
Gato GraphQL fornisce campi funzione tramite il concetto di Campi globali: campi accessibili sotto tutti i tipi dello schema GraphQL. (I campi normali in GraphQL, al contrario, sono accessibili solo sotto un tipo specifico, come Post o User).
Per convenzione, i campi globali in Gato GraphQL iniziano con _ (mentre i campi normali no).
L'estensione PHP Functions Via Schema fornisce molte delle funzioni PHP più comuni come campi globali, tra cui:
_arrayItem_arrayJoin_date_equals_inArray_intAdd_isEmpty_isNull_makeTime_objectProperty_sprintf_strContains_strRegexReplace_strSubstr_time,- E molti altri...
Possiamo creare dati generati dinamicamente e inserirli in un filtro per recuperare post, commenti, ecc.
Questa query recupera il numero di commenti aggiunti al sito nelle ultime 24 ore, calcolato come "ora attuale meno 86400 secondi":
query {
timeNow: _time
time24HsAgo: _intSubtract(
subtract: 86400,
from: $__timeNow
)
date24HsAgo: _date(
format: "Y-m-d\\TH:i:sO",
timestamp: $__time24HsAgo
)
commentsAddedInLast24Hs: commentCount(
filter: {
dateQuery: {
after: $__date24HsAgo
}
}
)
}$__timeNow è una variabile creata dinamicamente dall'estensione Field To Input, che ci consente di ottenere il valore di un campo e inserirlo in un altro campo nella stessa operazione.
Il campo da cui si vuole ottenere il valore viene referenziato usando la sintassi "Variabile" $, e __ prima dell'alias o del nome del campo:
{
posts {
excerpt
# Referencing previous field with name "excerpt"
isEmptyExcerpt: _isEmpty(value: $__excerpt)
# Referencing previous field with alias "isEmptyExcerpt"
isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
}
}Questa query recupera il numero di commenti aggiunti al sito a partire da "24 ore fa", "1 anno fa", "inizio del mese" e "inizio dell'anno":
query {
timeNow: _time
time24HsAgo: _intSubtract(subtract: 86400, from: $__timeNow)
date24HsAgo: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__time24HsAgo)
time1YearAgo: _intSubtract(subtract: 31536000, from: $__timeNow)
date1YearAgo: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__time1YearAgo)
timeBegOfThisMonth: _makeTime(hour: 0, minute: 0, second: 0, day: 1)
dateBegOfThisMonth: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__timeBegOfThisMonth)
timeBegOfThisYear: _makeTime(hour: 0, minute: 0, second: 0, month: 1, day: 1)
dateBegOfThisYear: _date(format: "Y-m-d\\TH:i:sO", timestamp: $__timeBegOfThisYear)
commentsAddedInLast24Hs: commentCount(filter: { dateQuery: { after: $__date24HsAgo } } )
commentsAddedInLast1Year: commentCount(filter: { dateQuery: { after: $__date1YearAgo } } )
commentsAddedSinceBegOfThisMonth: commentCount(filter: { dateQuery: { after: $__dateBegOfThisMonth } } )
commentsAddedSinceBegOfThisYear: commentCount(filter: { dateQuery: { after: $__dateBegOfThisYear } } )
}Questa query è identica alla precedente, ma recupera il formato di tempo standardizzato "Y-m-d\\TH:i:sO" dalla costante PHP DATE_ISO8601:
query {
# This PHP constant will provide standard time format "Y-m-d\\TH:i:sO"
DATE_ISO8601: _env(name: DATE_ISO8601)
timeNow: _time
time24HsAgo: _intSubtract(
subtract: 86400,
from: $__timeNow
)
date24HsAgo: _date(
format: $__DATE_ISO8601,
timestamp: $__time24HsAgo
)
}Il campo _env è fornito tramite l'estensione Costanti PHP e Variabili d'Ambiente via Schema.
Tramite la Schema Configuration applicata e le impostazioni del plugin, possiamo configurare quali costanti e variabili d'ambiente possono essere interrogate.