Schema 教程第1课:搜索 WordPress 数据
第1课:搜索 WordPress 数据
在 WordPress 中搜索数据在某些情况下存在限制,Gato GraphQL 可以帮助扩展这些功能。
其中一个典型示例涉及自定义字段(即元值):我们可以使用自定义字段为文章(以及用户、评论和分类法)添加额外信息,但在使用关键词搜索文章时,WordPress 不会在元值中进行搜索。
因此,我们可以使用 Gato GraphQL 通过元键和值来搜索文章(以及用户、评论和分类法)。
示例
- 将以下 queries 创建为持久化 Query,以便将其存储在网站中并反复执行
- 将其发布为
private,使其仅在 wp-admin 内对管理员可用 - 使用 API 层级来管理它们(例如:将持久化 Query
internal作为所有内部 queries 的祖先:internal/search-posts-without-thumbnail、internal/search-users-by-locale等)
以下 query 获取所有有缩略图的文章以及没有缩略图的文章:
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 获取所有使用"阿根廷西班牙语"语言区域的用户:
query {
argentineSpanishLocaleUsers: users(
filter: {
metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_AR"
operator: EQUALS
}
}
}
}
) {
id
name
locale: metaValue(key: "locale")
}
}我们可以使用 AND 和 OR 关系来更精确地过滤数据。以下 query 获取既有缩略图、又有自定义元 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
}
}按元过滤也可以与任何标准数据项结合使用。以下 query 获取所有在某一日期之后创建、且标记了 "wordpress" 标签的无缩略图文章:
query {
posts(
filter: {
metaQuery: {
key: "_thumbnail_id",
compareBy: {
key: {
operator: NOT_EXISTS
}
}
},
dateQuery: {
after: "2020-07-01"
},
tagSlugs: [
"wordpress"
]
}
) {
id
title
tagNames
}
}我们还可以使用正则表达式搜索元值。以下 query 搜索所有使用西班牙语语言区域的用户(例如,阿根廷的 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