Lập trình với APITiêm nhiều tài nguyên vào WP-CLI
Tiêm nhiều tài nguyên vào WP-CLI
Trong hướng dẫn Bổ sung WP-CLI, chúng ta chỉ truy xuất (và tiêm vào WP-CLI) một ID người dùng duy nhất. Bây giờ, hãy truy xuất nhiều ID người dùng trong khi thực thi một GraphQL query duy nhất.
Trong GraphQL query này:
- Chúng ta xóa đối số
paginationkhỏi query, để truy xuất danh sách tất cả người dùng có ngôn ngữ địa phương tiếng Tây Ban Nha - Chúng ta sử dụng Multiple Query Execution để xuất danh sách các ID người dùng, dưới biến động
$userIDs - Chúng ta in các phần tử của mảng này bằng
_arrayJoin, nối các mục với khoảng trắng ở giữa, dưới bí danhspanishLocaleUserIDs - Chúng ta thực thi thao tác
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: " "
)
}Phản hồi cho query này sẽ là:
{
"data": {
"users": [
{
"id": 3,
"name": "Subscriber Bennett",
"locale": "es_AR"
},
{
"id": 2,
"name": "Blogger Davenport",
"locale": "es_ES"
}
],
"spanishLocaleUserIDs": "3 2"
}
}Khi thực thi query, từ điển trong phần thân của yêu cầu phải chỉ định tên của thao tác cần thực thi ("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/)Chúng ta cũng phải điều chỉnh regex (do bí danh mới, khoảng trắng giữa các ID và dấu ngoặc kép xung quanh chuỗi này):
SPANISH_LOCALE_USER_IDS=$(echo $GRAPHQL_RESPONSE \
| grep -E -o '"spanishLocaleUserIDs\":"((\d|\s)+)"' \
| cut -d':' -f2- | cut -d'"' -f2- | rev | cut -d'"' -f2- | rev)In nội dung của biến SPANISH_LOCALE_USER_IDS, chúng ta nhận được tất cả các ID, được phân cách bằng khoảng trắng:
echo $SPANISH_LOCALE_USER_IDS
# Response:
# 3 2Bây giờ chúng ta có thể tiêm tất cả các ID cùng lúc vào lệnh WP-CLI (nếu lệnh đó hỗ trợ), hoặc lặp qua chúng và thực thi lệnh cho từng ID:
for USER_ID in $(echo $SPANISH_LOCALE_USER_IDS); do wp user update "$(echo $USER_ID)" --locale=fr_FR; done