Lezione 1: Ricerca di dati in WordPress
La ricerca di dati in WordPress è limitata in diversi casi, e Gato GraphQL può aiutare ad ampliare queste capacità .
Un esempio riguarda i campi personalizzati (ovvero i valori meta): possiamo usare i campi personalizzati per aggiungere informazioni extra ai post (e anche agli utenti, commenti e tassonomie), tuttavia quando si cerca post con una parola chiave, WordPress non effettua la ricerca all'interno dei valori meta.
Possiamo quindi usare Gato GraphQL per cercare post (e anche utenti, commenti e tassonomie) per chiave e valore meta.
Esempi
- Crea le queries di seguito come Queries persistite, in modo da conservarle nel sito web ed eseguirle più volte
- Pubblicale come
private, in modo che siano disponibili solo nel wp-admin, e solo per l'amministratore - Usa una gerarchia di API per gestirle (ad esempio: avere una Persisted Query
internalcome antenata di tutte le queries interne:internal/search-posts-without-thumbnail,internal/search-users-by-locale, ecc.)
Questa query recupera tutti i post che hanno una miniatura e quelli che non ce l'hanno:
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
}
}Questa query recupera tutti gli utenti che utilizzano la locale "Spagnolo dell'Argentina":
query {
argentineSpanishLocaleUsers: users(
filter: {
metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_AR"
operator: EQUALS
}
}
}
}
) {
id
name
locale: metaValue(key: "locale")
}
}Possiamo usare le relazioni AND e OR per filtrare i dati con maggiore precisione. Questa query recupera i post che hanno sia una miniatura sia un meta personalizzato todo_action con valore "replace" (il che significa che la miniatura deve essere sostituita):
query {
posts(
filter: {
metaQuery: [
{
relation: AND
key: "_thumbnail_id",
compareBy: {
key: {
operator: EXISTS
}
}
},
{
key: "todo_action",
compareBy: {
stringValue: {
value: "replace"
operator: EQUALS
}
}
}
]
}
) {
id
title
}
}Il filtraggio per meta può anche essere combinato con qualsiasi elemento di dati standard. Questa query recupera tutti i post senza miniatura creati dopo una certa data e con il tag "wordpress":
query {
posts(
filter: {
metaQuery: {
key: "_thumbnail_id",
compareBy: {
key: {
operator: NOT_EXISTS
}
}
},
dateQuery: {
after: "2020-07-01"
},
tagSlugs: [
"wordpress"
]
}
) {
id
title
tagNames
}
}Possiamo anche effettuare ricerche meta usando espressioni regex. Questa query cerca tutti gli utenti con una locale spagnola (ad esempio, es_AR per l'Argentina, es_ES per la Spagna, e così via):
query {
spanishLocaleUsers: users(filter: { metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_[A-Z]+"
operator: REGEXP
}
}
}}) {
id
name
locale: metaValue(key: "locale")
}
}