Чтобы сохранить метаданные в файле 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);
Как вы сказали, что с помощью API WC, может быть, вы хотите добавить это поле для возвращения 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