duancheng1955 2016-09-08 23:00
浏览 189
已采纳

如何获取WooCommerce订单详情

How can I get WooCommerce order details by order id. I tried this but did not work for me.

$order = new WC_Order( $order_id );
  • 写回答

4条回答 默认 最新

  • duan19780629 2017-06-22 19:59
    关注

    WOOCOMMERCE ORDERS IN VERSION 3.0+

    Since Woocommerce mega major Update 3.0+ things have changed quite a lot:

    Related:
    How to get Customer details from Order in WooCommerce?
    Get Order items and WC_Order_Item_Product in WooCommerce 3

    So also the Order items properties will not be accessible as before in a foreach loop and you will have to use this specific getter and setter methods instead.

    Using some WC_Order and WC_Abstract_Order methods (example):

    // Get an instance of the WC_Order object (same as before)
    $order = wc_get_order( $order_id );
    
    $order_id  = $order->get_id(); // Get the order ID
    $parent_id = $order->get_parent_id(); // Get the parent order ID (for subscriptions…)
    
    $user_id   = $order->get_user_id(); // Get the costumer ID
    $user      = $order->get_user(); // Get the WP_User object
    
    $order_status  = $order->get_status(); // Get the order status 
    $currency      = $order->get_currency(); // Get the currency used  
    $payment_method = $order->get_payment_method(); // Get the payment method ID
    $payment_title = $order->get_payment_method_title(); // Get the payment method title
    $date_created  = $order->get_date_created(); // Get date created (WC_DateTime object)
    $date_modified = $order->get_date_modified(); // Get date modified (WC_DateTime object)
    
    $billing_country = $order->get_billing_country(); // Customer billing country
    
    // ... and so on ...
    

    Get and access to the order data properties (in an array of values):

    // Get an instance of the WC_Order object
    $order = wc_get_order( $order_id );
    
    $order_data = $order->get_data(); // The Order data
    
    $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'];
    

    Get the order items and access the data with WC_Order_Item_Product and WC_Order_Item methods:

    // Get an instance of the WC_Order object
    $order = wc_get_order($order_id);
    
    // Iterating through each WC_Order_Item_Product objects
    foreach ($order->get_items() as $item_key => $item ):
    
        ## Using WC_Order_Item methods ##
    
        // Item ID is directly accessible from the $item_key in the foreach loop or
        $item_id = $item->get_id();
    
        ## Using WC_Order_Item_Product methods ##
    
        $product      = $item->get_product(); // Get the WC_Product object
    
        $product_id   = $item->get_product_id(); // the Product id
        $variation_id = $item->get_variation_id(); // the Variation id
    
        $item_type    = $item->get_type(); // Type of the order item ("line_item")
    
        $item_name    = $item->get_name(); // Name of the product
        $quantity     = $item->get_quantity();  
        $tax_class    = $item->get_tax_class();
        $line_subtotal     = $item->get_subtotal(); // Line subtotal (non discounted)
        $line_subtotal_tax = $item->get_subtotal_tax(); // Line subtotal tax (non discounted)
        $line_total        = $item->get_total(); // Line total (discounted)
        $line_total_tax    = $item->get_total_tax(); // Line total tax (discounted)
    
        ## Access Order Items data properties (in an array of values) ##
        $item_data    = $item->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'];
    
        // Get data from The WC_product object using methods (examples)
        $product        = $item->get_product(); // Get the WC_Product object
    
        $product_type   = $product->get_type();
        $product_sku    = $product->get_sku();
        $product_price  = $product->get_price();
        $stock_quantity = $product->get_stock_quantity();
    
    endforeach;
    

    So using get_data() method allow us to access to the protected data (associative array mode) …

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 MATLAB动图的问题
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名