How to customize a WooCommerce order number?
CHALLENGE: apply a prefix and a sufix to woo order_number
SOLUTION: define woocommerce_order_number filter
By design, WooCommerce order number is just the next available ID from the wp_posts table. ID value is set as AUTO_INCREMENT. When you’re adding new WP posts / pages, a new row will be added in the wp_posts table. Also, shop orders are defined as records there.
SQL Find all orders
To retrieve all order list, we can use the SQL Select query.
# select all woocommerce orders
SELECT * FROM wp_posts WHERE post_type LIKE 'shop_order'
Custom order number
We would like to customize the order number displayed in order details, email notifications and API responses. The prefix will be 2 letter language code, the suffix will be the year when the order was created. Our WordPress uses multisite network configuration. A custom order number allows to distinguish orders between different sub sites / languages.
/**
* // functions.php
* Customize order number
* Example: EN/604/2021
*/
add_filter( 'woocommerce_order_number', 'ct_change_woocommerce_order_number', 1, 2);
function ct_change_woocommerce_order_number( $order_id, $order ) {
$blog_id = get_current_blog_id();
$prefix = 'EN/';
$orderDate = new DateTime($order->get_date_created());
$suffix = '/' . $orderDate->format('Y');
if($blog_id == 2) {
$prefix = 'DE/';
}
return $prefix . $order->get_id() . $suffix;
}
That’s it for today’s guideline. Don’t forget to follow us for other useful suggestions and tips.