Injecter plusieurs ressources dans WP-CLI
Dans le guide Compléter WP-CLI, nous n'avons récupéré (et injecté dans WP-CLI) qu'un seul ID d'utilisateur. Maintenant, récupérons plusieurs ID d'utilisateurs lors de l'exécution d'une unique requête GraphQL.
Dans cette requête GraphQL :
- Nous supprimons l'argument
paginationde la requête, afin de récupérer la liste de tous les utilisateurs avec la locale espagnole - Nous utilisons l'Exécution de Requêtes Multiples pour exporter une liste des ID d'utilisateurs, sous la variable dynamique
$userIDs - Nous affichons les éléments de ce tableau avec
_arrayJoin, en joignant les éléments avec un espace entre eux, sous l'aliasspanishLocaleUserIDs - Nous exécutons l'opération
FormatAndPrintData
# This query is stored in file "find-multiple-users-with-spanish-locale.gql"
query RetrieveData {
users(
filter: {
metaQuery: {
key: "locale",
compareBy: {
stringValue: {
value: "es_[A-Z]+"
operator: REGEXP
}
}
}
}
) {
id @export(as: "userIDs", type: LIST)
name
locale: metaValue(key: "locale")
}
}
query FormatAndPrintData @depends(on: "RetrieveData") {
spanishLocaleUserIDs: _arrayJoin(
array: $userIDs,
separator: " "
)
}La réponse à cette requête sera :
{
"data": {
"users": [
{
"id": 3,
"name": "Subscriber Bennett",
"locale": "es_AR"
},
{
"id": 2,
"name": "Blogger Davenport",
"locale": "es_ES"
}
],
"spanishLocaleUserIDs": "3 2"
}
}Lors de l'exécution de la requête, le dictionnaire dans le corps de la requête doit indiquer le nom de l'opération à exécuter ("FormatAndPrintData") :
GRAPHQL_QUERY=$(cat find-multiple-users-with-spanish-locale.gql)
GRAPHQL_BODY="{\"operationName\": \"FormatAndPrintData\", \"query\": \"$(echo $GRAPHQL_QUERY | tr '\n' ' ' | sed 's/"/\\"/g')\"}"
GRAPHQL_RESPONSE=$(curl \
-X POST \
-H "Content-Type: application/json" \
-d $GRAPHQL_BODY \
https://mysite.com/graphql/)Nous devons également adapter le regex (en raison du nouvel alias, de l'espace entre les ID, et des guillemets autour de cette chaîne) :
SPANISH_LOCALE_USER_IDS=$(echo $GRAPHQL_RESPONSE \
| grep -E -o '"spanishLocaleUserIDs\":"((\d|\s)+)"' \
| cut -d':' -f2- | cut -d'"' -f2- | rev | cut -d'"' -f2- | rev)En affichant le contenu de la variable SPANISH_LOCALE_USER_IDS, nous obtenons tous les ID, séparés par un espace :
echo $SPANISH_LOCALE_USER_IDS
# Response:
# 3 2Nous pouvons maintenant injecter tous les ID ensemble dans la commande WP-CLI (si elle le prend en charge), ou les itérer et exécuter la commande pour chacun d'eux :
for USER_ID in $(echo $SPANISH_LOCALE_USER_IDS); do wp user update "$(echo $USER_ID)" --locale=fr_FR; done