要将元数据保存到 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 将在您可能不希望的某些地方显示元数据。随着_
元数据将被隐藏。