Lição 2: Consultando dados dinâmicos
O Gato GraphQL pode ampliar ainda mais as capacidades do WordPress para buscar dados por meio do uso de campos "função" (um tipo distinto de campo que fornece funcionalidade em vez de dados), permitindo-nos calcular dados dinamicamente, inseri-los de volta na query e afetar a resposta com controle granular.
Exemplos
O Gato GraphQL fornece campos de função sob o conceito de Campos globais: campos acessíveis em todos os tipos do schema GraphQL. (Campos normais no GraphQL, em contraste, são acessíveis apenas sob algum tipo específico, como Post ou User).
Por convenção, campos globais no Gato GraphQL começam com _ (e campos normais não).
A extensão PHP Functions Via Schema fornece muitas das funções PHP mais comuns como campos globais, incluindo:
_arrayItem_arrayJoin_date_equals_inArray_intAdd_isEmpty_isNull_makeTime_objectProperty_sprintf_strContains_strRegexReplace_strSubstr_time,- E muito mais...
Podemos criar dados gerados dinamicamente e inseri-los em um filtro para buscar posts, comentários, etc.
Esta query recupera o número de comentários adicionados ao site nas últimas 24 horas, calculado como "hora atual menos 86400 segundos":
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 é uma variável criada dinamicamente pela extensão Field to Input, que nos permite obter o valor de um campo e inseri-lo em outro campo na mesma operação.
O campo do qual se deseja obter o valor é referenciado usando a sintaxe "Variável" $, e __ antes do alias ou nome do campo:
{
posts {
excerpt
# Referencing previous field with name "excerpt"
isEmptyExcerpt: _isEmpty(value: $__excerpt)
# Referencing previous field with alias "isEmptyExcerpt"
isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
}
}Esta query recupera o número de comentários adicionados ao site a partir de "24 horas atrás", "1 ano atrás", "início do mês" e "início do ano":
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 } } )
}Esta query é igual à anterior, porém recupera o formato de tempo padronizado "Y-m-d\\TH:i:sO" a partir da constante 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
)
}O campo _env é fornecido pela extensão PHP Constants and Environment Variables via Schema.
Por meio da Schema Configuration aplicada e das configurações do plugin, podemos configurar quais constantes e variáveis de ambiente podem ser consultadas.