2016-12-28 99 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

相关问题