要将元数据保存到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