スキーマチュートリアル
スキーマチュートリアルレッスン1: WordPressデータの検索

レッスン1: WordPressデータの検索

WordPress内でのデータ検索はいくつかのケースで制限があり、Gato GraphQLはこれらの機能を拡張するのに役立ちます。

そのような例の一つがカスタムフィールド(つまり、メタ値)です。カスタムフィールドを使用して投稿(およびユーザー、コメント、タクソノミー)に追加情報を付与することができますが、キーワードで投稿を検索する際、WordPressはメタ値の中を検索しません。

そのため、Gato GraphQLを使用して、メタキーと値によって投稿(およびユーザー、コメント、タクソノミー)を検索することができます。

  • 以下のクエリをパーシストクエリとして作成し、ウェブサイトに保存して繰り返し実行できるようにしてください
  • privateとして公開し、wp-admin内でのみ、管理者のみが利用できるようにしてください
  • APIの階層を使用して管理してください(例:パーシストクエリ internal をすべての内部クエリの祖先にする:internal/search-posts-without-thumbnailinternal/search-users-by-locale など)

このクエリは、サムネイルがある投稿とない投稿をすべて取得します。

query {
  postsWithThumbnail: posts(
    filter: {
      metaQuery: {
        key: "_thumbnail_id",
        compareBy: {
          key: {
            operator: EXISTS
          }
        }
      }
    }
  ) {
    id
    title
    featuredImage {
      id
      src
    }
  }
 
  postsWithoutThumbnail: posts(
    filter: {
      metaQuery: {
        key: "_thumbnail_id",
        compareBy: {
          key: {
            operator: NOT_EXISTS
          }
        }
      }
    }
  ) {
    id
    title
  }
}

このクエリは、ロケール「アルゼンチンのスペイン語」を使用しているすべてのユーザーを取得します。

query {
  argentineSpanishLocaleUsers: users(
    filter: {
      metaQuery: {
        key: "locale",
        compareBy: {
          stringValue: {
            value: "es_AR"
            operator: EQUALS
          }
        }
      }
    }
  ) {
    id
    name
    locale: metaValue(key: "locale")
  }
}

AND および OR のリレーションを使用して、データをより正確にフィルタリングできます。このクエリは、サムネイルがあり、かつカスタムメタ todo_action の値が "replace"(サムネイルを差し替える必要があることを意味する)の投稿を取得します。

query {
  posts(
    filter: {
      metaQuery: [
        {
          relation: AND
          key: "_thumbnail_id",
          compareBy: {
            key: {
              operator: EXISTS
            }
          }
        },
        {
          key: "todo_action",
          compareBy: {
            stringValue: {
              value: "replace"
              operator: EQUALS
            }
          }
        }
      ]
    }
  ) {
    id
    title
  }
}

メタによるフィルタリングは、標準的なデータ項目と組み合わせることもできます。このクエリは、特定の日付以降に作成され、"wordpress" とタグ付けされたサムネイルなしの投稿をすべて取得します。

query {
  posts(
    filter: {
      metaQuery: {
        key: "_thumbnail_id",
        compareBy: {
          key: {
            operator: NOT_EXISTS
          }
        }
      },
      dateQuery: {
        after: "2020-07-01"
      },
      tagSlugs: [
        "wordpress"
      ]
    }
  ) {
    id
    title
    tagNames
  }
}

正規表現を使用してメタを検索することもできます。このクエリは、スペイン語ロケールのすべてのユーザーを検索します(例:アルゼンチンの es_AR、スペインの es_ES など)。

query {
  spanishLocaleUsers: users(filter: { metaQuery: {
    key: "locale",
    compareBy: {
      stringValue: {
        value: "es_[A-Z]+"
        operator: REGEXP
      }
    }
  }}) {
    id
    name
    locale: metaValue(key: "locale")
  }
}