拡張機能

Query Functions

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

Logo
Target Image

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スキーマにメタディレクティブを追加し、配列フィールドとオブジェクトフィールドの値要素をイテレーションおよび操作します:

  1. @underArrayItem
  2. @underJSONObjectProperty
  3. @underEachArrayItem
  4. @underEachJSONObjectProperty
  5. @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 ディレクティブを追加します。

以下の例では、投稿にアイキャッチ画像がない場合、フィールド featuredImagenull を返します:

{
  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
    }
  )
}

...次のレスポンスが生成されます(フィールド siteURLrequestURL が削除されていることに注意してください):

{
  "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"
    )
  }
}

All-Inclusive バンドルを購入

Personal
$79
/
“All-Inclusive” バンドル
ライセンス対象: 1 ドメイン
購入 ->
  • 1 ドメイン
  • サポート
  • 製品アップデート
Organization
$99
/
“All-Inclusive” バンドル
ライセンス対象: 3 ドメイン
購入 ->
  • 3 ドメイン
  • サポート
  • 製品アップデート
Professional
$199
/
“All-Inclusive” バンドル
ライセンス対象: 10 ドメイン
購入 ->
  • 10 ドメイン
  • サポート
  • 製品アップデート

ライセンスは1年間有効(毎年更新可能)です。価格は USD 表示です。

より多くのドメインが必要ですか?お問い合わせください

30日間の返金保証

各拡張機能は返金申請の保証付きで購入できます

Features illustration
Money back guarantee

返金ポリシーをご覧ください

Testimonial image

“このプラグインはまさに別次元です!サイトをまったく新しいレベルへと引き上げ、強力なパワーハウスに変えてくれます。できることを探れば探るほど、どんどん感動が深まります。迷っているなら、とにかく入手してください。後で後悔することになりますよ。 ドキュメントはそれ自体が雄弁に語っており、これ以上ないほど充実しています。 Leo(開発者)は、これまで出会った中で最も鋭く、機転の利く開発者の一人です。レスポンスは非常に速く、自分の専門分野を完全に把握していることが伝わります。このプラグインがここまで多くのことを実現できることに、心から興奮しています。可能性はほぼ無限大で、SEOを重視しているなら、このプラグインがサイトの順位を大きく押し上げてくれるでしょう。”

olmate - Webデベロッパー

ニュースレターを購読する

Gato GraphQL のすべてのアップデートを把握しましょう。