Schema-tutorial
Schema-tutorialLes 1: WordPress-gegevens zoeken

Les 1: WordPress-gegevens zoeken

Het zoeken naar gegevens binnen WordPress is in diverse gevallen beperkt, en Gato GraphQL kan helpen deze mogelijkheden uit te breiden.

Een voorbeeld hiervan zijn aangepaste velden (d.w.z. meta-waarden): we kunnen aangepaste velden gebruiken om extra informatie toe te voegen aan berichten (en ook aan gebruikers, reacties en taxonomieën), maar bij het zoeken naar berichten met een trefwoord doorzoekt WordPress de meta-waarden niet.

We kunnen dan Gato GraphQL gebruiken om berichten (en ook gebruikers, reacties en taxonomieën) te zoeken op meta-sleutel en -waarde.

Voorbeelden

  • Maak de onderstaande queries aan als Persisted Queries, zodat ze opgeslagen blijven op de website en keer op keer uitgevoerd kunnen worden
  • Publiceer ze als private, zodat ze alleen beschikbaar zijn binnen wp-admin, en alleen voor de beheerder
  • Gebruik een API-hiërarchie om ze te beheren (bijv.: laat een Persisted Query internal de voorouder zijn van alle interne queries: internal/search-posts-without-thumbnail, internal/search-users-by-locale, enz.)

Deze query haalt alle berichten op die een miniatuur hebben, en die dat niet hebben:

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
  }
}

Deze query haalt alle gebruikers op die de landinstelling "Spaans uit Argentinië" gebruiken:

query {
  argentineSpanishLocaleUsers: users(
    filter: {
      metaQuery: {
        key: "locale",
        compareBy: {
          stringValue: {
            value: "es_AR"
            operator: EQUALS
          }
        }
      }
    }
  ) {
    id
    name
    locale: metaValue(key: "locale")
  }
}

We kunnen de relaties AND en OR gebruiken om gegevens nauwkeuriger te filteren. Deze query haalt berichten op die zowel een miniatuur hebben als een aangepaste meta todo_action met de waarde "replace" (wat betekent dat de miniatuur vervangen moet worden):

query {
  posts(
    filter: {
      metaQuery: [
        {
          relation: AND
          key: "_thumbnail_id",
          compareBy: {
            key: {
              operator: EXISTS
            }
          }
        },
        {
          key: "todo_action",
          compareBy: {
            stringValue: {
              value: "replace"
              operator: EQUALS
            }
          }
        }
      ]
    }
  ) {
    id
    title
  }
}

Filteren op meta kan ook gecombineerd worden met standaard gegevensitems. Deze query haalt alle berichten zonder miniatuur op die na een bepaalde datum zijn aangemaakt en getagd zijn met "wordpress":

query {
  posts(
    filter: {
      metaQuery: {
        key: "_thumbnail_id",
        compareBy: {
          key: {
            operator: NOT_EXISTS
          }
        }
      },
      dateQuery: {
        after: "2020-07-01"
      },
      tagSlugs: [
        "wordpress"
      ]
    }
  ) {
    id
    title
    tagNames
  }
}

We kunnen meta ook doorzoeken met reguliere expressies. Deze query zoekt naar alle gebruikers met een Spaanstalige landinstelling (bijvoorbeeld es_AR voor Argentinië, es_ES voor Spanje, enzovoort):

query {
  spanishLocaleUsers: users(filter: { metaQuery: {
    key: "locale",
    compareBy: {
      stringValue: {
        value: "es_[A-Z]+"
        operator: REGEXP
      }
    }
  }}) {
    id
    name
    locale: metaValue(key: "locale")
  }
}