Schema Functions
PHP プログラミング言語の機能を GraphQL のフィールドおよびディレクティブとして公開します。

Click to watch tutorial video - 07:54
GraphQL スキーマには、PHP プログラミング言語の機能を公開するフィールドとディレクティブが提供されています。
関数フィールド
関数フィールドはグローバルフィールドであるため、GraphQL スキーマのすべての型(QueryRoot だけでなく Post、User なども含む)に追加されます。
関数フィールドは、データを取得した後に操作するのに役立ちます。フィールドの値を任意の方法で変換でき、強力なデータのインポート・エクスポート機能を提供します。
たとえば、Post.hasComments フィールドは存在しますが、その逆の値が必要な場合があります。新たに Post.notHasComments フィールドを作成する(PHP コードを編集する必要がある)代わりに、Field to Input 機能を使用して hasComments の値を not フィールドに入力し、GraphQL クエリ内で常に新しい値を算出することができます。
query {
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}関数ディレクティブ
GraphQL スキーマには、PHP などのプログラミング言語でよく見られる機能を公開するディレクティブが提供されています。
ディレクティブフィールドは、データを取得した後に操作するのに役立ちます。フィールドの値を任意の方法で変換でき、強力なデータのインポート・エクスポート機能を提供します。
たとえば、このクエリは:
query {
posts {
title @strUpperCase
}
}...次のレスポンスを返します:
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}ヘルパーフィールド
GraphQL スキーマには、よく使われるヘルパー機能を提供するフィールドが追加されています。
ヘルパーフィールドはグローバルフィールドであるため、GraphQL スキーマのすべての型(QueryRoot だけでなく Post、User なども含む)に追加されます。
このクエリでは、ウェブサイト上のユーザーの ID を取得し、その ID をパラメーターとして新しい GraphQL クエリを実行します:
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
}
}
}環境フィールド
GraphQL スキーマには、環境変数または PHP 定数(主に wp-config.php で定義されますが、他の場所で定義されることもあります)から値を取得できるグローバルフィールド _env が提供されています。
このクエリは、GitHub のプライベートリポジトリにアクセスするために設定する環境定数 GITHUB_ACCESS_TOKEN を取得します:
query {
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
}メール送信
GraphQL スキーマには、グローバルミューテーション _sendEmail が提供されています。
ミューテーション _sendEmail は、WordPress の wp_mail 関数を実行してメールを送信します。そのため、WordPress でのメール送信設定(使用する SMTP プロバイダーなど)が適用されます。
メールは、messageAs 入力の値に応じて「text」または「HTML」のコンテンツタイプで送信できます(messageAs は「oneof」の InputObject であるため、プロパティのいずれか一方のみ指定できます)。
mutation {
_sendEmail(
input: {
to: "target@email.com"
subject: "Email with text content"
messageAs: {
text: "Hello world!"
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}