Woocommerce获得订单商品元

时间:2018-05-16 06:49:14

标签: wordpress woocommerce

我正在使用woocommerce_checkout_create_order_line_item操作来更新/添加一些订单商品元数据。

同时,在同一个函数中,我想使用wc_get_order_item_meta从同一个项中获取不同的元值,但是我不能让它在这个动作钩子里工作。

我认为问题在于我无法获得使用wc_get_order_item_meta所需的$ item_id。

我是以错误的方式解决这个问题吗?

我在这里尝试过这种方法How to get order items ids to get some product meta data?

1 个答案:

答案 0 :(得分:0)

下面的代码将返回订单商品元的订单的所有详细信息。请将您想要使用的计数值移除其他值。

    function action_woocommerce_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) { 
        $order_id = $order->get_order_number();
        $order = wc_get_order( $order_id );
        $order_data = $order->get_data();

    //Order Data and order item metas

        $order_id = $order_data['id'];
        $order_parent_id = $order_data['parent_id'];
        $order_status = $order_data['status'];
        $order_currency = $order_data['currency'];
        $order_version = $order_data['version'];
        $order_payment_method = $order_data['payment_method'];
        $order_payment_method_title = $order_data['payment_method_title'];
        $order_payment_method = $order_data['payment_method'];
        $order_payment_method = $order_data['payment_method'];

        ## Creation and modified WC_DateTime Object date string ##

       // Using a formated date ( with php date() function as method)
       $order_date_created = $order_data['date_created']->date('Y-m-d H:i:s');
       $order_date_modified = $order_data['date_modified']->date('Y-m-d H:i:s');

       // Using a timestamp ( with php getTimestamp() function as method)
       $order_timestamp_created = $order_data['date_created']->getTimestamp();
       $order_timestamp_modified = $order_data['date_modified']->getTimestamp();


       $order_discount_total = $order_data['discount_total'];
       $order_discount_tax = $order_data['discount_tax'];
       $order_shipping_total = $order_data['shipping_total'];
       $order_shipping_tax = $order_data['shipping_tax'];
       $order_total = $order_data['cart_tax'];
       $order_total_tax = $order_data['total_tax'];
       $order_customer_id = $order_data['customer_id']; // ... and so on

       ## BILLING INFORMATION:

       $order_billing_first_name = $order_data['billing']['first_name'];
       $order_billing_last_name = $order_data['billing']['last_name'];
       $order_billing_company = $order_data['billing']['company'];
       $order_billing_address_1 = $order_data['billing']['address_1'];
       $order_billing_address_2 = $order_data['billing']['address_2'];
       $order_billing_city = $order_data['billing']['city'];
       $order_billing_state = $order_data['billing']['state'];
       $order_billing_postcode = $order_data['billing']['postcode'];
       $order_billing_country = $order_data['billing']['country'];
       $order_billing_email = $order_data['billing']['email'];
       $order_billing_phone = $order_data['billing']['phone'];

       ## SHIPPING INFORMATION:

       $order_shipping_first_name = $order_data['shipping']['first_name'];
       $order_shipping_last_name = $order_data['shipping']['last_name'];
       $order_shipping_company = $order_data['shipping']['company'];
       $order_shipping_address_1 = $order_data['shipping']['address_1'];
       $order_shipping_address_2 = $order_data['shipping']['address_2'];
       $order_shipping_city = $order_data['shipping']['city'];
       $order_shipping_state = $order_data['shipping']['state'];
       $order_shipping_postcode = $order_data['shipping']['postcode'];
      $order_shipping_country = $order_data['shipping']['country'];
     }; 

     //To get Order item metas please use below code
   foreach ($order->get_items() as $item_key => $item_values):

    ## Using WC_Order_Item methods ##

    // Item ID is directly accessible from the $item_key in the foreach loop or
    $item_id = $item_values->get_id();

    ## Using WC_Order_Item_Product methods ##

    $item_name = $item_values->get_name(); // Name of the product
    $item_type = $item_values->get_type(); // Type of the order item ("line_item")

    $product_id = $item_values->get_product_id(); // the Product id
    $wc_product = $item_values->get_product(); // the WC_Product object
    ## Access Order Items data properties (in an array of values) ##
    $item_data = $item_values->get_data();

    $product_name = $item_data['name'];
    $product_id = $item_data['product_id'];
    $variation_id = $item_data['variation_id'];
    $quantity = $item_data['quantity'];
    $tax_class = $item_data['tax_class'];
    $line_subtotal = $item_data['subtotal'];
    $line_subtotal_tax = $item_data['subtotal_tax'];
    $line_total = $item_data['total'];
    $line_total_tax = $item_data['total_tax'];

  endforeach;

    // add the action 
    add_action( 'woocommerce_checkout_create_order_line_item', 'action_woocommerce_checkout_create_order_line_item', 10, 4 );