Schema Functions
Esponi le funzionalità del linguaggio di programmazione PHP tramite campi e direttive GraphQL.

Click to watch tutorial video - 07:54
Lo schema GraphQL è arricchito con campi e direttive che espongono le funzionalità del linguaggio di programmazione PHP.
Campi di funzione
I campi di funzione sono campi globali, quindi vengono aggiunti a ogni singolo tipo nello schema GraphQL: in QueryRoot, ma anche in Post, User, ecc.
I campi di funzione sono utili per manipolare i dati una volta recuperati, consentendoci di trasformare il valore di un campo nel modo richiesto e offrendoci potenti capacità di importazione/esportazione dei dati.
Ad esempio, pur avendo un campo Post.hasComments, potremmo aver bisogno del valore opposto. Invece di creare un nuovo campo Post.notHasComments (che richiederebbe di modificare il codice PHP), possiamo usare la funzionalità Field to Input per passare il valore di hasComments a un campo not, calcolando così il nuovo valore interamente all'interno della query GraphQL:
query {
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}Direttive di funzione
Lo schema GraphQL è arricchito con direttive che espongono funzionalità comunemente presenti nei linguaggi di programmazione (come PHP).
Le direttive di campo sono utili per manipolare i dati una volta recuperati, consentendoci di trasformare il valore di un campo nel modo richiesto e offrendoci potenti capacità di importazione/esportazione dei dati.
Ad esempio, questa query:
query {
posts {
title @strUpperCase
}
}...produrrà questa risposta:
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}Campi ausiliari
Allo schema GraphQL vengono aggiunti campi che forniscono funzionalità ausiliarie di uso comune.
I campi ausiliari sono campi globali, quindi vengono aggiunti a ogni singolo tipo nello schema GraphQL: in QueryRoot, ma anche in Post, User, ecc.
In questa query, recuperiamo gli ID degli utenti del sito ed eseguiamo una nuova query GraphQL passando il loro ID come parametro:
query {
users {
userID: id
url: _urlAddParams(
url: "https://somewebsite/endpoint/user-data",
params: {
userID: $__userID
}
)
headers: _httpRequestHeaders
headerNameValueEntryList: _objectConvertToNameValueEntryList(
object: $__headers
)
_sendHTTPRequest(input: {
url: $__url
options: {
headers: $__headerNameValueEntryList
}
}) {
statusCode
contentType
body
}
}
}Campi di ambiente
Lo schema GraphQL è arricchito con il campo globale _env, che consente di ottenere il valore di una variabile d'ambiente o di una costante PHP (nella maggior parte dei casi definita in wp-config.php, ma che può essere definita anche altrove).
Questa query recupera la costante d'ambiente GITHUB_ACCESS_TOKEN che potremmo configurare per accedere a un repository privato su GitHub:
query {
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
}Invio di e-mail
Lo schema GraphQL è arricchito con la mutation globale _sendEmail.
La mutation _sendEmail invia e-mail eseguendo la funzione WordPress wp_mail. Di conseguenza, utilizzerà la configurazione definita per l'invio di e-mail in WordPress (come il provider SMTP da utilizzare).
L'e-mail può essere inviata con il tipo di contenuto "text" o "HTML", a seconda del valore dell'input messageAs (che è un InputObject "oneof", in modo che possa essere fornita solo una delle sue proprietà).
mutation {
_sendEmail(
input: {
to: "target@email.com"
subject: "Email with text content"
messageAs: {
text: "Hello world!"
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}