Reputation: 1074
How do I retrieve the order ID in WooCommerce?
Upvotes: 31
Views: 178155
Reputation: 1157
The current way of accomplishing this is by using this function:
$order->get_id();
That should return the order id without "#".
In older versions of WooCommerce, you may need to access it as a property instead:
echo $order->id;
Upvotes: 65
Reputation: 665
As LoicTheAztec mentioned here: https://stackoverflow.com/a/67182262/4638682
You get get this in several ways, within several template. Like so:
$order_id = absint( get_query_var('view-order') );
Upvotes: 1
Reputation: 89
As of woocommerce 3.0
$order->id;
will not work, it will generate notice, use getter function:
$order->get_id();
The same applies for other woocommerce objects like procut.
Upvotes: 6
Reputation: 598
$order = new WC_Order( $post_id );
If you
echo $order->id;
then you'll be returned the id of the post from which the order is made. As you've already got that, it's probably not what you want.
echo $order->get_order_number();
will return the id of the order (with a # in front of it). To get rid of the #,
echo trim( str_replace( '#', '', $order->get_order_number() ) );
as per the accepted answer.
Upvotes: 7
Reputation: 696
it worked. Just modified it
global $woocommerce, $post;
$order = new WC_Order($post->ID);
//to escape # from order id
$order_id = trim(str_replace('#', '', $order->get_order_number()));
Upvotes: 41
Reputation: 515
I didnt test it and dont know were you need it, but:
$order = new WC_Order(post->ID);
echo $order->get_order_number();
Let me know if it works. I belive order number echoes with the "#" but you can split that if only need only the number.
Upvotes: 14