How to get the last order of a customer in Woocommerce

烂漫一生 提交于 2020-07-27 03:39:20

问题


I am using "How can I get the latest order id in Woocommerce" answer code that returns last order with a custom function get_last_order_id().

Here is my code attempt where I get order items:

<?php

    $latest_order_id = get_last_order_id(); // Last order ID
    $order = wc_get_order( $latest_order_id ); // Get an instance of the WC_Order object
    $order_details = $order->get_data(); // Get the order data in an array
    $order_status = esc_html( wc_get_order_status_name( $order->get_status() ) );
    $order_items = $order_details['line_items'];
?>

Then I use this in this code:

<div class="row last-order">
    <div class="col-md-7">
      <ul>
        <?php
        foreach ($order_items as $product_name) { ?>
          <li><?php echo $product_name['name']; ?></li>
        <?php
        }
        ?>
      </ul>
    </div>
    <div class="col-md-4 order-status-box">
      <h6 class="status"><?php echo $order_status; ?></h6>
      <i class="fas fa-chevron-down icon"></i>
    </div>
</div>

I would like to get the last order for the current customer. How can I change the custom function get_last_order_id() to get the last order for the current customer?

I would like to receive the contents of my cart in addition to the latest order from the current user.


回答1:


Updated: replaced WC()->customer by new WC_Customer( get_current_user_id() ); for better compatibility.

The Class WC_Customer Class include the get_last_order() method to get the last order for a customer (so you don't need anymore the custom function get_last_order_id() from this answer thread).

So your code will be:

<?php

    // For logged in users only
    if ( is_user_logged_in() ) :

    $user_id = get_current_user_id(); // The current user ID

    // Get the WC_Customer instance Object for the current user
    $customer = new WC_Customer( $user_id );

    // Get the last WC_Order Object instance from current customer
    $last_order = $customer->get_last_order();

    $order_id     = $last_order->get_id(); // Get the order id
    $order_data   = $last_order->get_data(); // Get the order unprotected data in an array
    $order_status = $last_order->get_status(); // Get the order status
?>

<div class="row last-order">
    <div class="col-md-7">
        <ul>
        <?php foreach ( $last_order->get_items() as $item ) : ?>
            <li><?php echo $item->get_name(); ?></li>
        <?php endforeach; ?>
      </ul>
    </div>
    <div class="col-md-4 order-status-box">
      <h6 class="status"><?php echo esc_html( wc_get_order_status_name( $order_status ) ); ?></h6>
      <i class="fas fa-chevron-down icon"></i>
    </div>
</div>

<?php endif; ?>

Tested and works.

Note: Now to "receive the contents of the cart in addition to the latest order from the current user", you will have to ask a new question with more details, one question at the time please.

Related:

  • How to get WooCommerce order details
  • Get Order items and WC_Order_Item_Product in WooCommerce 3
  • How to get Customer details from Order in WooCommerce?


来源:https://stackoverflow.com/questions/57603232/how-to-get-the-last-order-of-a-customer-in-woocommerce

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!