Access our premium support and let us know your problems, we will help you solve them.

0
No products in the cart.
  • This topic is empty.
Viewing 8 posts - 1 through 8 (of 8 total)
  • Author
    Posts
  • #8890
    blankfaisal-ijaz
    Participant

    In WooCommerce from the following line code:

    $order = new WC_Order( $order_id );
    

    How can I get WooCommerce order details from the order id?

    #10244
    blankloictheaztec
    Participant

    ONLY FOR WOOCOMMERCE VERSIONS 2.5.x AND 2.6.x

    For WOOCOMMERCE VERSION 3.0+ see THIS UPDATE

    Here is a custom function I have made, to make the things clear for you, related to get the data of an order ID. You will see all the different RAW outputs you can get and how to get the data you need…

    Using print_r() function (or var_dump() function too) allow to output the raw data of an object or an array.

    So first I output this data to show the object or the array hierarchy. Then I use different syntax depending on the type of that variable (string, array or object) to output the specific data needed.

    IMPORTANT: With $order object you can use most of WC_order or WC_Abstract_Order methods (using the object syntax)…


    Here is the code:

    function get_order_details($order_id){
    
        // 1) Get the Order object
        $order = wc_get_order( $order_id );
    
        // OUTPUT
        echo '<h3>RAW OUTPUT OF THE ORDER OBJECT: </h3>';
        print_r($order);
        echo '<br><br>';
        echo '<h3>THE ORDER OBJECT (Using the object syntax notation):</h3>';
        echo '$order->order_type: ' . $order->order_type . '<br>';
        echo '$order->id: ' . $order->id . '<br>';
        echo '<h4>THE POST OBJECT:</h4>';
        echo '$order->post->ID: ' . $order->post->ID . '<br>';
        echo '$order->post->post_author: ' . $order->post->post_author . '<br>';
        echo '$order->post->post_date: ' . $order->post->post_date . '<br>';
        echo '$order->post->post_date_gmt: ' . $order->post->post_date_gmt . '<br>';
        echo '$order->post->post_content: ' . $order->post->post_content . '<br>';
        echo '$order->post->post_title: ' . $order->post->post_title . '<br>';
        echo '$order->post->post_excerpt: ' . $order->post->post_excerpt . '<br>';
        echo '$order->post->post_status: ' . $order->post->post_status . '<br>';
        echo '$order->post->comment_status: ' . $order->post->comment_status . '<br>';
        echo '$order->post->ping_status: ' . $order->post->ping_status . '<br>';
        echo '$order->post->post_password: ' . $order->post->post_password . '<br>';
        echo '$order->post->post_name: ' . $order->post->post_name . '<br>';
        echo '$order->post->to_ping: ' . $order->post->to_ping . '<br>';
        echo '$order->post->pinged: ' . $order->post->pinged . '<br>';
        echo '$order->post->post_modified: ' . $order->post->post_modified . '<br>';
        echo '$order->post->post_modified_gtm: ' . $order->post->post_modified_gtm . '<br>';
        echo '$order->post->post_content_filtered: ' . $order->post->post_content_filtered . '<br>';
        echo '$order->post->post_parent: ' . $order->post->post_parent . '<br>';
        echo '$order->post->guid: ' . $order->post->guid . '<br>';
        echo '$order->post->menu_order: ' . $order->post->menu_order . '<br>';
        echo '$order->post->post_type: ' . $order->post->post_type . '<br>';
        echo '$order->post->post_mime_type: ' . $order->post->post_mime_type . '<br>';
        echo '$order->post->comment_count: ' . $order->post->comment_count . '<br>';
        echo '$order->post->filter: ' . $order->post->filter . '<br>';
        echo '<h4>THE ORDER OBJECT (again):</h4>';
        echo '$order->order_date: ' . $order->order_date . '<br>';
        echo '$order->modified_date: ' . $order->modified_date . '<br>';
        echo '$order->customer_message: ' . $order->customer_message . '<br>';
        echo '$order->customer_note: ' . $order->customer_note . '<br>';
        echo '$order->post_status: ' . $order->post_status . '<br>';
        echo '$order->prices_include_tax: ' . $order->prices_include_tax . '<br>';
        echo '$order->tax_display_cart: ' . $order->tax_display_cart . '<br>';
        echo '$order->display_totals_ex_tax: ' . $order->display_totals_ex_tax . '<br>';
        echo '$order->display_cart_ex_tax: ' . $order->display_cart_ex_tax . '<br>';
        echo '$order->formatted_billing_address->protected: ' . $order->formatted_billing_address->protected . '<br>';
        echo '$order->formatted_shipping_address->protected: ' . $order->formatted_shipping_address->protected . '<br><br>';
        echo '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <br><br>';
    
        // 2) Get the Order meta data
        $order_meta = get_post_meta($order_id);
    
        echo '<h3>RAW OUTPUT OF THE ORDER META DATA (ARRAY): </h3>';
        print_r($order_meta);
        echo '<br><br>';
        echo '<h3>THE ORDER META DATA (Using the array syntax notation):</h3>';
        echo '$order_meta[_order_key][0]: ' . $order_meta[_order_key][0] . '<br>';
        echo '$order_meta[_order_currency][0]: ' . $order_meta[_order_currency][0] . '<br>';
        echo '$order_meta[_prices_include_tax][0]: ' . $order_meta[_prices_include_tax][0] . '<br>';
        echo '$order_meta[_customer_user][0]: ' . $order_meta[_customer_user][0] . '<br>';
        echo '$order_meta[_billing_first_name][0]: ' . $order_meta[_billing_first_name][0] . '<br><br>';
        echo 'And so on ……… <br><br>';
        echo '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <br><br>';
    
        // 3) Get the order items
        $items = $order->get_items();
    
        echo '<h3>RAW OUTPUT OF THE ORDER ITEMS DATA (ARRAY): </h3>';
    
        foreach ( $items as $item_id => $item_data ) {
    
            echo '<h4>RAW OUTPUT OF THE ORDER ITEM NUMBER: '. $item_id .'): </h4>';
            print_r($item_data);
            echo '<br><br>';
            echo 'Item ID: ' . $item_id. '<br>';
            echo '$item_data["product_id"] <i>(product ID)</i>: ' . $item_data['product_id'] . '<br>';
            echo '$item_data["name"] <i>(product Name)</i>: ' . $item_data['name'] . '<br>';
    
            // Using get_item_meta() method
            echo 'Item quantity <i>(product quantity)</i>: ' . $order->get_item_meta($item_id, '_qty', true) . '<br><br>';
            echo 'Item line total <i>(product quantity)</i>: ' . $order->get_item_meta($item_id, '_line_total', true) . '<br><br>';
            echo 'And so on ……… <br><br>';
            echo '- - - - - - - - - - - - - <br><br>';
        }
        echo '- - - - - - E N D - - - - - <br><br>';
    }
    

    Code goes in function.php file of your active child theme (or theme) or also in any plugin file.

    Usage (if your order ID is 159 for example):

    get_order_details(159);
    

    This code is tested and works.

    Updated code on November 21, 2016

    #10245
    blankloictheaztec
    Participant

    WOOCOMMERCE ORDERS IN VERSION 3.0+

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

    Related:
    • How can I get customer details from an order in WooCommerce?
    • Get Order items and WC_Order_Item_Product in WooCommerce 3

    So the Order items properties will not be accessible as before in a foreach loop and you will have to use these 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 (see the conditional method has_status() below)
    $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)
    
    $order_received_url = $order->get_checkout_order_received_url();
    
    $billing_country = $order->get_billing_country(); // Customer billing country
    
    // ... and so on ...
    

    For order status as a conditional method (where "the_targeted_status" need to be defined and replaced by an order status to target a specific order status):

    if ( $order->has_status('completed') ) {
        // Do something
    }
    

    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['total'];
    $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) …

    #10239
    blankswaroop-t-n
    Participant
    $order = new WC_Order(get_query_var('order-received'));
    
    #10243
    blankmujuonly
    Participant

    Accessing direct properties and related are explained

    // Get an instance of the WC_Order object
                $order = wc_get_order($order_id);
                $order_data = array(
                        'order_id' => $order->get_id(),
                        'order_number' => $order->get_order_number(),
                        'order_date' => date('Y-m-d H:i:s', strtotime(get_post($order->get_id())->post_date)),
                        'status' => $order->get_status(),
                        'shipping_total' => $order->get_total_shipping(),
                        'shipping_tax_total' => wc_format_decimal($order->get_shipping_tax(), 2),
                        'fee_total' => wc_format_decimal($fee_total, 2),
                        'fee_tax_total' => wc_format_decimal($fee_tax_total, 2),
                        'tax_total' => wc_format_decimal($order->get_total_tax(), 2),
                        'cart_discount' => (defined('WC_VERSION') && (WC_VERSION >= 2.3)) ? wc_format_decimal($order->get_total_discount(), 2) : wc_format_decimal($order->get_cart_discount(), 2),
                        'order_discount' => (defined('WC_VERSION') && (WC_VERSION >= 2.3)) ? wc_format_decimal($order->get_total_discount(), 2) : wc_format_decimal($order->get_order_discount(), 2),
                        'discount_total' => wc_format_decimal($order->get_total_discount(), 2),
                        'order_total' => wc_format_decimal($order->get_total(), 2),
                        'order_currency' => $order->get_currency(),
                        'payment_method' => $order->get_payment_method(),
                        'shipping_method' => $order->get_shipping_method(),
                        'customer_id' => $order->get_user_id(),
                        'customer_user' => $order->get_user_id(),
                        'customer_email' => ($a = get_userdata($order->get_user_id() )) ? $a->user_email : '',
                        'billing_first_name' => $order->get_billing_first_name(),
                        'billing_last_name' => $order->get_billing_last_name(),
                        'billing_company' => $order->get_billing_company(),
                        'billing_email' => $order->get_billing_email(),
                        'billing_phone' => $order->get_billing_phone(),
                        'billing_address_1' => $order->get_billing_address_1(),
                        'billing_address_2' => $order->get_billing_address_2(),
                        'billing_postcode' => $order->get_billing_postcode(),
                        'billing_city' => $order->get_billing_city(),
                        'billing_state' => $order->get_billing_state(),
                        'billing_country' => $order->get_billing_country(),
                        'shipping_first_name' => $order->get_shipping_first_name(),
                        'shipping_last_name' => $order->get_shipping_last_name(),
                        'shipping_company' => $order->get_shipping_company(),
                        'shipping_address_1' => $order->get_shipping_address_1(),
                        'shipping_address_2' => $order->get_shipping_address_2(),
                        'shipping_postcode' => $order->get_shipping_postcode(),
                        'shipping_city' => $order->get_shipping_city(),
                        'shipping_state' => $order->get_shipping_state(),
                        'shipping_country' => $order->get_shipping_country(),
                        'customer_note' => $order->get_customer_note(),
                        'download_permissions' => $order->is_download_permitted() ? $order->is_download_permitted() : 0,
                );
    

    Additional details

      $line_items_shipping = $order->get_items('shipping');
                foreach ($line_items_shipping as $item_id => $item) {
                    if (is_object($item)) {
                        if ($meta_data = $item->get_formatted_meta_data('')) :
                            foreach ($meta_data as $meta_id => $meta) :
                                if (in_array($meta->key, $line_items_shipping)) {
                                    continue;
                                }
                                // html entity decode is not working preoperly
                                $shipping_items[] = implode('|', array('item:' . wp_kses_post($meta->display_key), 'value:' . str_replace('&times;', 'X', strip_tags($meta->display_value))));
                            endforeach;
                        endif;
                    }
                }
    
                //get fee and total
                $fee_total = 0;
                $fee_tax_total = 0;
    
                foreach ($order->get_fees() as $fee_id => $fee) {
    
                    $fee_items[] = implode('|', array(
                            'name:' .  html_entity_decode($fee['name'], ENT_NOQUOTES, 'UTF-8'),
                            'total:' . wc_format_decimal($fee['line_total'], 2),
                            'tax:' . wc_format_decimal($fee['line_tax'], 2),
                    ));
    
                    $fee_total += $fee['line_total'];
                    $fee_tax_total += $fee['line_tax'];
                }
    
                // get tax items
                foreach ($order->get_tax_totals() as $tax_code => $tax) {            
                    $tax_items[] = implode('|', array(
                        'rate_id:'.$tax->id,
                        'code:' . $tax_code,
                        'total:' . wc_format_decimal($tax->amount, 2),
                        'label:'.$tax->label,                
                        'tax_rate_compound:'.$tax->is_compound,
                    ));
                }
    
                // add coupons
                foreach ($order->get_items('coupon') as $_ => $coupon_item) {
    
                    $coupon = new WC_Coupon($coupon_item['name']);
    
                    $coupon_post = get_post((WC()->version < '2.7.0') ? $coupon->id : $coupon->get_id());
                    $discount_amount = !empty($coupon_item['discount_amount']) ? $coupon_item['discount_amount'] : 0;
                    $coupon_items[] = implode('|', array(
                            'code:' . $coupon_item['name'],
                            'description:' . ( is_object($coupon_post) ? $coupon_post->post_excerpt : '' ),
                            'amount:' . wc_format_decimal($discount_amount, 2),
                    ));
                }
    
                foreach ($order->get_refunds() as $refunded_items){
                    $refund_items[] = implode('|', array(
                        'amount:' . $refunded_items->get_amount(),
                'reason:' . $refunded_items->get_reason(),
                        'date:'. date('Y-m-d H-i-s',strtotime((WC()->version < '2.7.0') ? $refunded_items->date_created : $refunded_items->get_date_created())),
                    ));
                }
    
    #10242
    blankzaheer-bashir
    Participant

    You can get all details by order object.

       // Get $order object from order ID
          
        $order = wc_get_order( $order_id );
          
        // Now you have access to (see above)...
          
        if ( $order ) {
           // Get Order ID and Key
        $order->get_id();
        $order->get_order_key();
         
        // Get Order Totals $0.00
        $order->get_formatted_order_total();
        $order->get_cart_tax();
        $order->get_currency();
        $order->get_discount_tax();
        $order->get_discount_to_display();
        $order->get_discount_total();
        $order->get_fees();
        $order->get_formatted_line_subtotal();
        $order->get_shipping_tax();
        $order->get_shipping_total();
        $order->get_subtotal();
        $order->get_subtotal_to_display();
        $order->get_tax_location();
        $order->get_tax_totals();
        $order->get_taxes();
        $order->get_total();
        $order->get_total_discount();
        $order->get_total_tax();
        $order->get_total_refunded();
        $order->get_total_tax_refunded();
        $order->get_total_shipping_refunded();
        $order->get_item_count_refunded();
        $order->get_total_qty_refunded();
        $order->get_qty_refunded_for_item();
        $order->get_total_refunded_for_item();
        $order->get_tax_refunded_for_item();
        $order->get_total_tax_refunded_by_rate_id();
        $order->get_remaining_refund_amount();
        }
    
    #10241
    blankhamid-araghi
    Participant

    Using wp/wc rest api :

            $request = new WP_REST_Request('GET', '/wc/v3/orders/<YOUR_ORDER_ID');
    
            $response = rest_do_request($request);
            $server = rest_get_server();
            $order = $server->response_to_data($response, false);
            
            print_r( $order['id'] );
            print_r( $order['date_created'] );
            print_r( $order['status'] );
            ...
    

    sources: https://wpscholar.com/blog/internal-wp-rest-api-calls/ , https://developer.wordpress.org/rest-api/reference/posts/#list-posts

    #10240
    blanksharpminds
    Participant

    To get WooCommerce order details from the order ID using the following line of code:

    $order = new WC_Order( $order_id );
    

    You can use the following steps:

    1. Get the order object using the WC_Order() constructor.
    2. Use the getter methods on the order object to get the order details that you need.

    For example, to get the order total, you can use the following code:

    $order_total = $order->get_total();
    

    To get the order status, you can use the following code:

    $order_status = $order->get_status();
    

    To get the order billing address, you can use the following code:

    $order_billing_address = $order->get_billing_address();
    

    To get the order shipping address, you can use the following code:

    $order_shipping_address = $order->get_shipping_address();
    

    You can also use the get_data() method to get an array of all of the order data. This can be useful if you need to get all of the order details at once.

    For example, to get an array of all of the order data, you can use the following code:

    $order_data = $order->get_data();
    

    Once you have the order data, you can use it however you need. For example, you can display it on your website, save it to a database, or send it to a payment gateway.

Viewing 8 posts - 1 through 8 (of 8 total)
  • You must be logged in to reply to this topic.