Query Functions
GraphQLクエリ内のフィールド値を操作するための、ユーティリティと特殊ディレクティブのコレクションです。メタプログラミング機能を提供します。

Click to watch tutorial video - 12:09
GraphQLクエリ内のフィールド値を操作するための、ユーティリティと特殊ディレクティブのコレクションです。メタプログラミング機能を提供します。
Field to Input
フィールドの値を取得して操作し、同じクエリ内で別のフィールドへの入力として渡します。
query {
posts {
excerpt
# Referencing previous field with name "excerpt"
isEmptyExcerpt: _isEmpty(value: $__excerpt)
# Referencing previous field with alias "isEmptyExcerpt"
isNotEmptyExcerpt: _not(value: $__isEmptyExcerpt)
}
}フィールド値のイテレーションと操作
GraphQLスキーマにメタディレクティブを追加し、配列フィールドとオブジェクトフィールドの値要素をイテレーションおよび操作します:
@underArrayItem@underJSONObjectProperty@underEachArrayItem@underEachJSONObjectProperty@objectClone
@underArrayItem は、ネストされたディレクティブを配列内の特定のアイテムに適用します。
以下のクエリでは、カテゴリ名の配列のうち最初のアイテムのみが大文字に変換されます:
query {
posts {
categoryNames
@underArrayItem(index: 0)
@strUpperCase
}
}...結果は次のとおりです:
{
"data": {
"posts": {
"categoryNames": [
"NEWS",
"sports"
]
}
}
}Field on Field
解決されたフィールドの値に対して特定のフィールドを実行する @applyField ディレクティブを追加します。
あるフィールドに適用することで、@applyField ディレクティブは別のフィールド(同じタイプで利用可能で、同じオブジェクトに適用される)を実行し、その結果値を別のディレクティブに渡すか、フィールドの値を上書きすることができます。
以下のクエリでは、オブジェクトの Post.title フィールドの値が "Hello world!" です。_strUpperCase フィールドを実行するために @applyField を追加すると:
{
post(by: { id: 1 }) {
title
@passOnwards(as: "input")
@applyField(
name: "_strUpperCase"
arguments: {
text: $input
},
setResultInResponse: true
)
}
}...フィールドの値が大文字に変換され、次の結果が得られます:
{
"data": {
"post": {
"title": "HELLO WORLD!"
}
}
}条件付きフィールド操作
GraphQLスキーマにメタディレクティブ @if と @unless を追加し、条件に応じてフィールドへのネストされたディレクティブを実行します。
@if は、条件が true の場合にのみネストされたディレクティブを実行します。
このクエリでは、"Leo" と "Peter" は「特別ユーザー」配列に含まれているため名前が大文字に変換されますが、"Martin" は変換されません:
query {
users {
name
@passOnwards(as: "userName")
@applyField(
name: "_inArray"
arguments: {
value: $userName
array: ["Leo", "John", "Peter"]
}
passOnwardsAs: "isSpecialUser"
)
@if(
condition: $isSpecialUser
)
@strUpperCase
}
}...結果は次のとおりです:
{
"data": {
"users": [
{
"name": "LEO"
},
{
"name": "Martin"
},
{
"name": "PETER"
}
]
}
}フィールドのデフォルト値
null または空のフィールドに値を設定する @default ディレクティブを追加します。
以下の例では、投稿にアイキャッチ画像がない場合、フィールド featuredImage は null を返します:
{
post(by: { id: 1 }) {
featuredImage {
id
src
}
}
}{
"data": {
"post": {
"featuredImage": null
}
}
}@default を使用することで、デフォルトの画像を取得できます:
{
post(by: { id: 1 }) {
featuredImage @default(value: 55) {
id
src
}
}
}{
"data": {
"post": {
"featuredImage": {
"id": 55,
"src": "http://mysite.com/wp-content/uploads/my-default-image.webp"
}
}
}
}フィールドレスポンスの削除
GraphQLスキーマに @remove ディレクティブを追加し、レスポンスからフィールドの出力を削除します。
以下のクエリでは、サイトドメインとREST APIエンドポイントを連結してHTTPリクエスト送信用のURLを生成しています。これらのコンポーネントの値は不要なため、レスポンスに出力する必要はなく、@remove で削除できます:
query {
siteURL: optionValue(name: "siteurl")
@remove
requestURL: _sprintf(
string: "%s/wp-json/wp/v2/comments/11/?_fields=id,content,date",
values: [$__siteURL]
)
@remove
_sendJSONObjectItemHTTPRequest(
input: {
url: $__requestURL
}
)
}...次のレスポンスが生成されます(フィールド siteURL と requestURL が削除されていることに注意してください):
{
"data": {
"_sendJSONObjectItemHTTPRequest": {
"id": 11,
"date": "2020-12-12T04:07:36",
"content": {
"rendered": "<p>Btw, I really like this stuff<\/p>\n"
}
}
}
}レスポンスエラートリガー
GraphQLスキーマにグローバルフィールド _fail とディレクティブ @fail を追加して、レスポンスの errors プロパティに明示的にエントリを追加します。また、グローバルフィールド _warn とディレクティブ @warn を追加して、レスポンスの warnings プロパティにエントリを追加します。
フィールド _fail は常にエラーを追加し、ディレクティブ @fail は引数 condition の条件が満たされた場合にエラーを追加します:
query {
_fail(message: "Some error")
posts {
featuredImage @fail(
condition: IS_NULL,
message: "The post does not have a featured image"
) {
id
src
}
}
users {
name @fail(
condition: IS_EMPTY,
message: "The retrieved user does not have a name"
)
}
}