0

Я создаю ионное приложение с Woocommerce.Woocommerce REST API: добавление метаданных в позицию и в базу данных

Я видел некоторые вопросы о stackoverflow, но они на самом деле не отвечают на вопрос, поэтому я поднимаю это снова.

Я смог отправить заказ в базу данных, но мне нужно добавить еще одну мета в базу данных, и эти данные являются самыми важными.

В соответствии с этим link, свойство meta является readonly, следовательно, непригодным для использования.

Я хочу знать, как я могу это достичь, добавив дополнительный параметр в порядок line_item или с помощью какого-либо словаря или веб-крючка.

Я использую реализацию JS с WooCommerce API V3.

ответ

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); 

Как вы сказали, что с помощью 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 покажет метаданные в некоторых местах, которые вы, возможно, не захотите. С _ метаданные будут скрыты.

+0

Уже сделано, спасибо – Temitayo