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
internalde 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")
}
}