我正在与Woocommerce构建一个离子应用程序。
我已经看到了一些关于此问题的stackoverflow问题,但他们实际上没有回答这个问题,所以我再次提出这个问题。
我已经能够向数据库发送订单,但我需要再向数据库添加一个元数据,这个数据是最重要的。
根据此link,元属性是只读的,因此无法使用。
我想知道如何通过在订单line_item
或某些wordpress或web hook中添加额外参数来实现此目的。
我正在使用WooCommerce API V3的JS实现。
答案 0 :(得分: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会在某些您可能不想要的位置显示元数据。使用_
将隐藏元数据。