1

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

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

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

根据此链接,元属性是只读的,因此不可用。

我想知道如何通过在订单中添加额外的参数line_item或通过一些 wordpress 或 web 挂钩来实现这一点。

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

4

1 回答 1

2

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

于 2017-03-16T03:53:50.490 回答