web-dev-qa-db-ja.com

広告申込情報のメタデータを更新 - WooCommerce API

各広告申込情報に添付した広告申込情報のメタフィールドを更新しようとしましたが停止しました。特定の注文への電話から、あなたはあなたに以下の添付された広告申込情報メタを見ます:

"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":""
            },
         ]

その考えは、我々のディストリビューターがそれぞれの注文をプログラムで引き下げ、そして次に出荷確認Eメールを引き起こすメタを更新するということです。

私の問題は、私が以下のようにcurlを使って自分自身でメタデータを更新(テスト)しようとしたときです。

--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_itemsは確かに配列なので、これは混乱です。また、特定の広告申込情報IDを使用してみましたが、戻り構造に基づいて、広告申込情報IDとメタデータはどちらも広告申込情報オブジェクトの最上位レベルのキーです。

私はline_items[0]にアクセスするだけでテストできます。私は1つの広告申込情報しか持っておらず、line_itemの値は上記からわかるように配列です。

line_items[0][meta_data]も配列AFAIKに見えます。私が間違ってやっていることについて何か指導は?

大丈夫、広告申込情報はルート自体でlaアクセスされる可能性があります。

/wp-json/wc/v2/orders/2594/line_items

しかし、これ(パラメータとしても)の多くの繰り返しもうまくいきませんでした。

編集: 何らかの理由で広告申込情報に関連付けられたproduct_idを追加する必要がありました...次のcURLは機能します(HTTP 200)が機能しましたが、実際にはフィールドを更新しませんでした。私はAPIのv2を使っています。

--data '{"status":"completed","line_items":{"0":{"product_id":"194","meta_data":{"3":{"_carrier":"carrier"}}}}}'

なぜこれが更新されないのですか?

1
HectorOfTroy407

何らかの理由で、配列を2倍にする必要があります。firt要素を参照しているため、これは影響を受けません。私はこれを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_itemsとmeta_dataの両方でdouble array()が呼び出されることに注意してください。 idproduct_idの両方も提供します。それをJSONに変換すれば完了です;-)

1
Hokascha