我偶然发现了一个使用 node.js 通过 WooCommerce REST API 更新订单行项目元数据的问题。
我一直在按照这些步骤更新订单(并且在某些领域取得了成功): https ://woocommerce.github.io/woocommerce-rest-api-docs/#update-an-order
现在,我想要实现的是更改订单的已发货行项目数。我通常会在 wordpress UI 中使用部分订单 WC 插件。
下面,您可以找到我使用订单 API 调用从 WC 获得的订单项的屏幕截图。meta_data 数组的最后一个元素有键“shipped”,它包含一个带有一个对象的数组,说明一个(两个订购的物品中的一个)已经发货:
"line_items": [{
"id": 1937,
"name": "Maya",
"product_id": 1271,
"variation_id": 1272,
"quantity": 2,
"tax_class": "",
"subtotal": "140.00",
"subtotal_tax": "0.00",
"total": "140.00",
"total_tax": "0.00",
"taxes": [],
"meta_data": [{
"id": 21637,
"key": "pa_product-color",
"value": "beige"
}, {
"id": 21638,
"key": "pa_shoe-size",
"value": "42"
}, {
"id": 21639,
"key": "pa_shoe-width",
"value": "wide"
}, {
"id": 21640,
"key": "shipped",
"value": [{
"qty": 1,
"date": "Nov 21, 2017"
}
]
}
],
"sku": "2522BE42W",
"price": 70
},
如您所见,键 'shipped' 的值是一个对象。当我将它(返回)发送到 WC 时,我收到一条错误消息:
"data":{"status":400,"params":{"line_items":"line_items[0][meta_data][3][value] is not of type string."}}}
当我尝试将值作为字符串发送时,即
lineItems[0].meta_data = [{key:"shipped", value: "[{qty:'2'}]" }]
我没有收到任何错误,但是 WC 将其视为字符串,而不是对象,并且不会按照我的意图更新数据库中的装运数量(它只会将装运数量降至 0):
{
"id": 21640,
"key": "shipped",
"value": "[{qty:'2'}]"
}
任何见解或想法 - 我如何通过 WC API 修改订单项的发货数量?