Lição 1: Pesquisando dados no WordPress
A pesquisa de dados no WordPress é limitada em vários casos, e o Gato GraphQL pode ajudar a ampliar essas capacidades.
Um exemplo envolve campos personalizados (ou seja, valores meta): podemos usar campos personalizados para adicionar informações extras aos posts (e também a usuários, comentários e taxonomias), porém ao pesquisar posts com alguma palavra-chave, o WordPress não busca dentro dos valores meta.
Podemos então usar o Gato GraphQL para pesquisar posts (e também usuários, comentários e taxonomias) por chave e valor meta.
Exemplos
- Crie as queries abaixo como Queries persistidas, para mantê-las armazenadas no site e executá-las repetidamente
- Publique-as como
private, para que estejam disponíveis apenas no wp-admin e somente para o administrador - Use uma hierarquia de API para gerenciá-las (ex: ter uma Persisted Query
internalcomo ancestral de todas as queries internas:internal/search-posts-without-thumbnail,internal/search-users-by-locale, etc.)
Esta query recupera todos os posts que têm uma miniatura, e os que não têm:
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
}
}Esta query recupera todos os usuários que utilizam o locale "Espanhol da Argentina":
query {
argentineSpanishLocaleUsers: users(
filter: {
metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_AR"
operator: EQUALS
}
}
}
}
) {
id
name
locale: metaValue(key: "locale")
}
}Podemos usar as relações AND e OR para filtrar os dados com maior precisão. Esta query recupera posts que têm tanto uma miniatura quanto um meta personalizado todo_action com valor "replace" (o que significa que a miniatura precisa ser substituída):
query {
posts(
filter: {
metaQuery: [
{
relation: AND
key: "_thumbnail_id",
compareBy: {
key: {
operator: EXISTS
}
}
},
{
key: "todo_action",
compareBy: {
stringValue: {
value: "replace"
operator: EQUALS
}
}
}
]
}
) {
id
title
}
}A filtragem por meta também pode ser combinada com qualquer um dos itens de dados padrão. Esta query recupera todos os posts sem miniatura criados após uma determinada data e que tenham a tag "wordpress":
query {
posts(
filter: {
metaQuery: {
key: "_thumbnail_id",
compareBy: {
key: {
operator: NOT_EXISTS
}
}
},
dateQuery: {
after: "2020-07-01"
},
tagSlugs: [
"wordpress"
]
}
) {
id
title
tagNames
}
}Também podemos pesquisar meta usando expressões regex. Esta query busca todos os usuários com um locale em espanhol (por exemplo, es_AR para a Argentina, es_ES para a Espanha, e assim por diante):
query {
spanishLocaleUsers: users(filter: { metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_[A-Z]+"
operator: REGEXP
}
}
}}) {
id
name
locale: metaValue(key: "locale")
}
}