Leçon 1 : Rechercher des données dans WordPress
La recherche de données dans WordPress est limitée dans plusieurs cas, et Gato GraphQL peut aider à étendre ces capacités.
Un tel exemple concerne les champs personnalisés (c'est-à-dire les valeurs de méta) : nous pouvons utiliser des champs personnalisés pour ajouter des informations supplémentaires aux publications (et aussi aux utilisateurs, commentaires et taxonomies), mais lors de la recherche de publications avec un mot-clé, WordPress ne cherche pas dans les valeurs de méta.
Nous pouvons alors utiliser Gato GraphQL pour rechercher des publications (et aussi des utilisateurs, des commentaires et des taxonomies) par clé et valeur de méta.
Exemples
- Créez les requêtes ci-dessous en tant que Requêtes persistées, afin de les conserver dans le site web et de les exécuter encore et encore
- Publiez-les en tant que
private, pour qu'elles soient disponibles uniquement dans le wp-admin, et seulement pour l'administrateur - Utilisez une hiérarchie d'API pour les gérer (par exemple : avoir une Persisted Query
internalcomme ancêtre de toutes les requêtes internes :internal/search-posts-without-thumbnail,internal/search-users-by-locale, etc.)
Cette requête récupère toutes les publications qui ont une miniature, et celles qui n'en ont pas :
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
}
}Cette requête récupère tous les utilisateurs qui utilisent la locale « Espagnol d'Argentine » :
query {
argentineSpanishLocaleUsers: users(
filter: {
metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_AR"
operator: EQUALS
}
}
}
}
) {
id
name
locale: metaValue(key: "locale")
}
}Nous pouvons utiliser les relations AND et OR pour filtrer les données avec plus de précision. Cette requête récupère les publications qui ont à la fois une miniature et un méta personnalisé todo_action avec la valeur "replace" (ce qui signifie que la miniature doit être remplacée) :
query {
posts(
filter: {
metaQuery: [
{
relation: AND
key: "_thumbnail_id",
compareBy: {
key: {
operator: EXISTS
}
}
},
{
key: "todo_action",
compareBy: {
stringValue: {
value: "replace"
operator: EQUALS
}
}
}
]
}
) {
id
title
}
}Le filtrage par méta peut également être combiné avec n'importe lequel des éléments de données standard. Cette requête récupère toutes les publications sans miniature créées après une certaine date et étiquetées "wordpress" :
query {
posts(
filter: {
metaQuery: {
key: "_thumbnail_id",
compareBy: {
key: {
operator: NOT_EXISTS
}
}
},
dateQuery: {
after: "2020-07-01"
},
tagSlugs: [
"wordpress"
]
}
) {
id
title
tagNames
}
}Nous pouvons également rechercher des méta en utilisant des expressions regex. Cette requête recherche tous les utilisateurs avec une locale espagnole (par exemple, es_AR pour l'Argentine, es_ES pour l'Espagne, et ainsi de suite) :
query {
spanishLocaleUsers: users(filter: { metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_[A-Z]+"
operator: REGEXP
}
}
}}) {
id
name
locale: metaValue(key: "locale")
}
}