【问题标题】:Woocommerce REST API: Add meta data to line-item and to the databaseWoocommerce REST API:将元数据添加到订单项和数据库
【发布时间】:2016-12-28 18:59:50
【问题描述】:

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

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

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

根据这个link,元属性是只读的,因此不可用。

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

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

【问题讨论】:

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


    【解决方案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 将在您可能不希望的某些地方显示元数据。使用_,元数据将被隐藏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2018-07-12
      • 2021-06-20
      • 2018-07-31
      • 1970-01-01
      相关资源
      最近更新 更多