スキーマチュートリアルレッスン1: WordPressデータの検索
レッスン1: WordPressデータの検索
WordPress内でのデータ検索はいくつかのケースで制限があり、Gato GraphQLはこれらの機能を拡張するのに役立ちます。
そのような例の一つがカスタムフィールド(つまり、メタ値)です。カスタムフィールドを使用して投稿(およびユーザー、コメント、タクソノミー)に追加情報を付与することができますが、キーワードで投稿を検索する際、WordPressはメタ値の中を検索しません。
そのため、Gato GraphQLを使用して、メタキーと値によって投稿(およびユーザー、コメント、タクソノミー)を検索することができます。
例
- 以下のクエリをパーシストクエリとして作成し、ウェブサイトに保存して繰り返し実行できるようにしてください
privateとして公開し、wp-admin内でのみ、管理者のみが利用できるようにしてください- APIの階層を使用して管理してください(例:パーシストクエリ
internalをすべての内部クエリの祖先にする:internal/search-posts-without-thumbnail、internal/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")
}
}Prev
Next