要將元數據保存到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會在一些您不想要的地方顯示元數據。隨着_
元數據將被隱藏。
已經完成,謝謝 – Temitayo