WooCommerce API - 更新订单元字段

WooCommerce API - Update Order Meta Fields

WooCommerce Rest API 是否提供任何更新元字段的方法?

他们有一个扩展,可以在使用元字段发货时向订单添加跟踪号,但没有任何文档说明如何或是否可以通过以下方式使用此信息更新订单的元字段他们的休息 API.

2020 年更新:

最新版本的 WooCommerce API 允许更新以下划线开头的元字段。耶!您可以按照下面提到的 big_water 进行批量操作:

您还可以使用新的 V2 或 V3 WooCommerce API 订单更新 PUT 端点更新单个订单的元字段:https://woocommerce.github.io/woocommerce-rest-api-docs/#update-an-order

"meta_data": [
  {
    "key": "_some_field",
    "value": "some value"
  },
  {
    "key": "_some_other_field",
    "value": "some other value"
  }
]

下面的旧答案 - 关于旧的 WooCommerce API 端点:

关于如何执行此操作的文档很少(根本没读过)。以下是对普通元字段执行此操作的方法:

curl -X PUT "https://somesite.com/wc-api/v2/orders/124?filter[meta]=true" -u ck_yourconsumerkey:cs_yourconsumersecret -H "Content-Type: application/json" -d 
'{
    "order": {
        "order_meta": {"meta_key":"meta_value"}
    }
}'

以下划线开头的元字段受到保护,无法通过 API 更新。但是,根据 this GitHub issue,下一个版本的 WooCommerce 应该支持更新受保护的元字段,只要它们不是 WooCommerce 的内部值。

订单的其他部分(如客户和商品)有元字段,但我需要一段时间才能再次挖掘这些信息,这个问题专门针对订单级元字段。

编辑:WooCommerce 改变了主意并关闭了 GitHub 案例,表示他们将不允许访问这些字段。不幸的是,这使得 WooCommerce 成为唯一无法通过 API 将跟踪信息添加到订单的购物车之一,而没有可怕的 hackish 解决方法。

是的,这是可能的。使用 Woocommerce 3.0 版的 REST API,我在其最新文档 here.

中描述的端点上使用以下 json 添加了自定义订单跟踪和承运人字段
{
    "create":[],
    "update": [
        {
            "id": 77248,
            "status": "shipping",
            "meta_data":[
                {
                    "key": "package_carrier",
                    "value": "USPS First Class"
                },
                {
                    "key": "tracking_number",
                    "value": "12354LKJSDF"
                }
            ]
        }
    ]
}

然后他们在订单编辑屏幕上显示:

这显然是对订单使用批量更新,但是,这对于单个订单端点也应该仍然有效。

由于我没有包含 "id" 字段,因此它创建了一个新字段。我相信要更新字段,您需要提供 "id" 字段。

您可以使用对“/wp-json/wc/v3/orders”端点的 HTTP POST 请求和额外的 "meta_data" 字段,如以下 curl 命令所示。这是使用 "REST API for Woocommerce version 3.0"

测试的
curl --request POST \
     --url https://yourserver.com/wp-json/wc/v3/orders \
     --header 'authorization: Basic <credentials>' \
     --header 'content-type: application/json' \
     --data '{
    "line_items": [
    {
      "product_id": 425,
      "quantity": 1
    }
  ],
    "meta_data":[
        {
            "key": "custom key",
            "value": "custom value"
        }
    ]
}'