更新行项元数据-WooCommerce API

时间:2018-06-19 作者:HectorOfTroy407

一直在尝试更新我附加到每个行项目的行项目元字段。从对特定订单的调用中,您可以看到下面所附的行项目元:

"line_items":[  
      {  
         "id":243,
         "name":"Example Product",
         "product_id":194,
         "variation_id":0,
         "quantity":2,
         "tax_class":"",
         "subtotal":"84.00",
         "subtotal_tax":"0.00",
         "total":"84.00",
         "total_tax":"0.00",
         "taxes":[  ],
         "meta_data":[  
            {  
               "id":2197,
               "key":"_tracking_number",
               "value":""
            },
            {  
               "id":2198,
               "key":"_estimate_delivery_date",
               "value":""
            },
            {  
               "id":2199,
               "key":"_carrier",
               "value":""
            },
            {  
               "id":2200,
               "key":"_service",
               "value":""
            },
         ]
我们的想法是,我们的分销商将以编程方式下拉每个订单,然后更新元数据,从而触发发货确认电子邮件。

我的问题是,当我自己尝试用curl更新meta(测试)时,如下所示:

--data \'{"status":"completed","line_items":{"0":{"meta_data":{"_tracking_number":"being tracked"}}}}\'
我收到一个错误,说:

"Invalid parameter(s): line_items","data":{"status":400,"params":{"line_items":"line_items[0][meta_data] is not of type array."}}
这很混乱,因为line\\u项肯定是一个数组!我也尝试过使用特定的行项目ID,但基于返回结构,行项目ID和元数据都是行项目对象中的顶级键。

我正在访问line_items[0] 要进行测试,因为我只有一个行项目,而line\\u item值是一个数组,您可以从上面看到。

line_items[0][meta_data] 看起来也是一个数组AFAIK。有没有关于我做错了什么的指导?

我也有一个想法,好吧,也许行项目是在路径本身a la中访问的:

/wp-json/wc/v2/orders/2594/line_items
但这方面的许多迭代(也作为参数)也不起作用。

EDIT: 因此,出于某种原因,我不得不添加与行项目关联的product\\u id。。。下面的cURL works(HTTP 200)工作正常,但实际上没有更新字段。我正在使用API的v2。

--data \'{"status":"completed","line_items":{"0":{"product_id":"194","meta_data":{"3":{"_carrier":"carrier"}}}}}\'
知道为什么没有更新吗?

1 个回复
SO网友:Hokascha

出于某种原因,您必须将数组加倍,这可能不会影响您,因为您正在引用第一个元素。我在PHP中使用它:

function saveMetaItem($id_order,$id_item,$id_product,$meta_key,$meta_value){
    $woo = new wooclient();
    $data = array(
        \'line_items\' => array(array(
                       \'id\' => $id_item,
                       \'product_id\' => $id_product,
                       \'meta_data\' => array(array(
                            \'key\' => $meta_key,
                            \'value\' => $meta_value
                               ))
                       ))
    );
    $result = $woo->put(\'orders/\'.$id_order, $data);
    return $result;
}
请注意line\\u项和meta\\u数据中的double array()调用。同时提供两者idproduct_id. 将其转换为JSON并完成;-)

结束