Tutorial dello schema
Tutorial dello schemaLezione 1: Ricerca di dati in WordPress

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 internal come 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")
  }
}