Lektion 1: WordPress-Daten durchsuchen
Die Suche nach Daten in WordPress ist in einigen Fällen eingeschränkt, und Gato GraphQL kann helfen, diese Möglichkeiten zu erweitern.
Ein Beispiel dafür sind benutzerdefinierte Felder (d. h. Meta-Werte): Wir können benutzerdefinierte Felder verwenden, um Posts (sowie Benutzern, Kommentaren und Taxonomien) zusätzliche Informationen hinzuzufügen. Wenn du jedoch nach Posts mit einem bestimmten Stichwort suchst, durchsucht WordPress keine Meta-Werte.
Wir können dann Gato GraphQL verwenden, um Posts (sowie Benutzer, Kommentare und Taxonomien) nach Meta-Schlüssel und -Wert zu suchen.
Beispiele
- Erstelle die folgenden queries als Persisted Queries, damit sie auf der Website gespeichert und immer wieder ausgeführt werden können
- Veröffentliche sie als
private, damit sie nur im wp-admin und nur für den Administrator verfügbar sind - Verwende eine API-Hierarchie, um sie zu verwalten (z. B.: eine Persisted Query
internalals übergeordnetes Element aller internen queries:internal/search-posts-without-thumbnail,internal/search-users-by-localeusw.)
Diese query ruft alle Posts ab, die ein Vorschaubild haben, und jene, die keines haben:
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
}
}Diese query ruft alle Benutzer ab, die die Locale „Spanisch aus Argentinien" verwenden:
query {
argentineSpanishLocaleUsers: users(
filter: {
metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_AR"
operator: EQUALS
}
}
}
}
) {
id
name
locale: metaValue(key: "locale")
}
}Wir können die Relationen AND und OR verwenden, um Daten präziser zu filtern. Diese query ruft Posts ab, die sowohl ein Vorschaubild haben als auch ein benutzerdefiniertes Meta todo_action mit dem Wert "replace" (was bedeutet, dass das Vorschaubild ersetzt werden muss):
query {
posts(
filter: {
metaQuery: [
{
relation: AND
key: "_thumbnail_id",
compareBy: {
key: {
operator: EXISTS
}
}
},
{
key: "todo_action",
compareBy: {
stringValue: {
value: "replace"
operator: EQUALS
}
}
}
]
}
) {
id
title
}
}Die Filterung nach Meta kann auch mit beliebigen Standarddatenelementen kombiniert werden. Diese query ruft alle Posts ohne Vorschaubild ab, die nach einem bestimmten Datum erstellt wurden und mit "wordpress" getaggt sind:
query {
posts(
filter: {
metaQuery: {
key: "_thumbnail_id",
compareBy: {
key: {
operator: NOT_EXISTS
}
}
},
dateQuery: {
after: "2020-07-01"
},
tagSlugs: [
"wordpress"
]
}
) {
id
title
tagNames
}
}Wir können Meta auch mit regulären Ausdrücken (Regex) durchsuchen. Diese query sucht nach allen Benutzern mit einer spanischen Locale (zum Beispiel es_AR für Argentinien, es_ES für Spanien usw.):
query {
spanishLocaleUsers: users(filter: { metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_[A-Z]+"
operator: REGEXP
}
}
}}) {
id
name
locale: metaValue(key: "locale")
}
}