2016-12-28 100 views
0

我正在使用Woocommerce構建離子應用程序。Woocommerce REST API:向訂單項和數據庫添加元數據

我已經看到了一些關於此的stackoverflow問題,但他們實際上沒有回答這個問題,所以我再次提出這個問題。

我已經能夠發送訂單到數據庫,但我需要添加一個元數據庫,這個數據是最重要的。

根據此link,元屬性是隻讀的,因此不可用。

我想知道如何通過爲訂單line_item添加額外的參數或通過一些wordpress或web鉤子來實現此目的。

我正在使用WooCommerce API V3的JS實現。

回答

1

要將元數據保存到line_item(訂單中的產品),您可以掛鉤woocommerce_new_order_item操作。

胡克這樣的:

function my_line_item_metadata($item_id, $item, $order_id) { 
    // Here you have the item, his id, and the order's id 
    // You can get the order, for example 
    $order = new WC_Order($order_id); 
    $items = $order->get_items(); 
    foreach($items as $line_item_id => $item) { 
     // Here you can have all products from the order! 
    } 

     // Save here the metadata for the item id of the hooked line item 
     wc_add_order_item_meta($item_id, '_my_metadata', 'my metadata value'); 
} 
add_action('woocommerce_new_order_item', 'my_line_item_metadata', 10, 3); 

正如你說你使用WC API,你也許想這個字段添加到API返回......做到這一點,使用下面的代碼:

/** 
* Add order meta to the REST API 
* @see http://codegists.com/code/order%20item%20meta%20rest%20response/ 
* 
* @param \WP_REST_Response $response The response object. 
* @param \WP_Post $post Post object. 
* @param \WP_REST_Request $request Request object. 
* @return object updated response object 
*/ 
function my_add_metadata_on_line_item($response, $post, $request) { 

    $order_data = $response->get_data(); 

    foreach ($order_data['line_items'] as $key => $item) { 
     $order_data['line_items'][ $key ]['_my_metadata'] = wc_get_order_item_meta($item['id'], '_my_metadata', true); 
    } 

    $response->data = $order_data; 

    return $response; 
} 
add_filter('woocommerce_rest_prepare_shop_order', 'my_add_metadata_on_line_item', 10, 3); 

現在您的API將返回_my_metadata與訂單項。

PS .:如果您不保存自定義元數據與_,WC會在一些您不想要的地方顯示元數據。隨着_元數據將被隱藏。

+0

已經完成,謝謝 – Temitayo

相關問題