Lección 1: Buscando datos en WordPress
Buscar datos dentro de WordPress es limitado en varios casos, y Gato GraphQL puede ayudar a ampliar estas capacidades.
Un ejemplo así incluye los custom fields (es decir, los meta values): Podemos usar custom fields para añadir información extra a las entradas (y también a usuarios, comentarios, y taxonomías), sin embargo al buscar entradas con alguna palabra clave, WordPress no busca dentro de los meta values.
Podemos entonces usar Gato GraphQL para buscar entradas (y también usuarios, comentarios, y taxonomías) por clave y valor de meta.
Ejemplos
- Crea las consultas de abajo como Creando una consulta persistida, para mantenerlas almacenadas en el sitio web, y ejecutarlas una y otra vez
- Publícalas como
private, para que estén disponibles solo dentro del wp-admin, y solo para el admin - Usa una jerarquía de API para gestionarlas (por ejemplo: tener una Persisted Query
internalcomo ancestro de todas las consultas internas:internal/search-posts-without-thumbnail,internal/search-users-by-locale, etc.)
Esta consulta recupera todas las entradas que tienen una miniatura, y las que no:
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 consulta recupera todos los usuarios que usan el locale "Español de Argentina":
query {
argentineSpanishLocaleUsers: users(
filter: {
metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_AR"
operator: EQUALS
}
}
}
}
) {
id
name
locale: metaValue(key: "locale")
}
}Podemos usar las relaciones AND y OR para filtrar datos con más precisión. Esta consulta recupera entradas que ambas tienen una miniatura, y también tienen un custom meta todo_action con valor "replace" (lo que significa que necesita que se le reemplace la miniatura):
query {
posts(
filter: {
metaQuery: [
{
relation: AND
key: "_thumbnail_id",
compareBy: {
key: {
operator: EXISTS
}
}
},
{
key: "todo_action",
compareBy: {
stringValue: {
value: "replace"
operator: EQUALS
}
}
}
]
}
) {
id
title
}
}Filtrar por meta también se puede combinar con cualquiera de los elementos de datos estándar. Esta consulta recupera todas las entradas sin miniatura que fueron creadas después de una determinada fecha y han sido etiquetadas como "wordpress":
query {
posts(
filter: {
metaQuery: {
key: "_thumbnail_id",
compareBy: {
key: {
operator: NOT_EXISTS
}
}
},
dateQuery: {
after: "2020-07-01"
},
tagSlugs: [
"wordpress"
]
}
) {
id
title
tagNames
}
}También podemos buscar meta usando expresiones regex. Esta consulta busca todos los usuarios con un locale español (por ejemplo, es_AR para Argentina, es_ES para España, y así sucesivamente):
query {
spanishLocaleUsers: users(filter: { metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_[A-Z]+"
operator: REGEXP
}
}
}}) {
id
name
locale: metaValue(key: "locale")
}
}