Woocommerce REST API:将元数据添加到行项目和数据库

时间:2016-12-28 18:59:50

标签: javascript wordpress rest woocommerce woocommerce-rest-api

我正在与Woocommerce构建一个离子应用程序。

我已经看到了一些关于此问题的stackoverflow问题,但他们实际上没有回答这个问题,所以我再次提出这个问题。

我已经能够向数据库发送订单,但我需要再向数据库添加一个元数据,这个数据是最重要的。

根据此link,元属性是只读的,因此无法使用。

我想知道如何通过在订单line_item或某些wordpress或web hook中添加额外参数来实现此目的。

我正在使用WooCommerce API V3的JS实现。

1 个答案:

答案 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会在某些您可能不想要的位置显示元数据。使用_将隐藏元数据。