Custom Order Statuses for WooCommerce
Add your own order statuses to WooCommerce, with emails, stock changes, timed rules and Analytics that understands them.

What it does
Add your own order statuses to WooCommerce, with emails, stock changes, timed rules and Analytics that understands them.
Custom Order Statuses lets a shop describe its own fulfilment steps, such as Packing, Awaiting parts or Ready to collect, and have WooCommerce treat them as real order statuses. Each has a name, a colour and a place in the list, and you decide whether it counts as paid, which emails it sends and whether it takes stock off the shelf or puts it back. Switch the plugin off or delete it and every order moves into the status you chose for it, so none disappears from the orders list.
Pro adds timed and conditional rules, next-status buttons, customer permissions for each status, a status history with the time orders spend in each one, and WooCommerce Analytics that understands your statuses: unpaid statuses are left out of the totals by default, an order entering a paid status gets a payment date, and a rebuild button re-imports your orders. Two limits come from WooCommerce itself: leaving statuses out by default needs WooCommerce 11.2 or newer, and an order that has not been paid has no payment date, so under Analytics' default date type it is absent from Orders and Revenue. If the licence lapses, nothing is deleted.
See it in action
What the plugin does
- Your own order statuses, each with a name, a colour and a place in the list.
- A switch to say a status counts as paid.
- An email to the customer, the shop or both when an order enters a status, sent in addition to WooCommerce's own emails.
- Your own subject, heading and message for each status email, with the order number, date, customer name and status filled in.
- Reduce or restore stock when an order enters a status.
- A bulk action for every status on the orders list.
- Deleting a status asks where its orders should go, so none are left behind.
- Switch the plugin off or delete it and every order moves into the status you chose for it, so it stays in the orders list. Switch it on again and they move home.
- Orders stranded in a status nothing registers are found and brought back with one click.
- Settings import and export, to copy a setup to another shop or keep a backup.
- A choice to keep or remove your statuses and settings on uninstall.
- High-Performance Order Storage and block checkout compatibility.
- Timed rules that move an order on after a number of hours or days.
- Rules can be matched on payment method, order total or customer role.
- A rule that would send orders round in a circle is refused when you save, and a chain of moves stops after a handful with a note on the order.
- A waiting rule checks the order again when its time comes, and does nothing if the order has moved on.
- Next-status buttons on the order edit screen, with up to eight to choose from for each status.
- Customer permissions for each of your statuses: allow the Cancel button, the Pay button or file downloads.
- A permission only adds to what WooCommerce allows. It never takes the Cancel or Pay button away from a built-in status.
- A status history on every order: who moved it, when, and how long it stayed.
- Time in each status: the average stay for each status, taken from your 200 most recent orders that have a history.
- Your statuses are recorded in WooCommerce Analytics under their own names, and can be chosen in Analytics settings and in the order status filter.
- Statuses that are not counted as paid are left out of Analytics totals by default, on WooCommerce 11.2 or newer. A selection you save in Analytics settings always wins.
- An order entering a paid status gets a payment date, so it lands in the right Analytics period.
- A rebuild button re-imports the orders in your statuses in small batches, so a large shop is not slowed down.
- An option to give orders already in a paid status a payment date, taken from the status history where it is known.
- Analytics keeps counting WooCommerce's own statuses exactly as before.
- If the licence lapses nothing is deleted: statuses, emails, stock changes and bulk actions carry on, and the Pro screens stay readable but locked.
- A 14-day trial on a new install before the licence matters.
- Updates from your PluginCity account, kept coming by your licence key.
Pricing
Every Pro plan is the same plugin with every feature. The only difference is how many sites you can run it on.
Single site
One site, with a year of updates and support.
$49/year
Secure checkout. Cancel any time.
5 sites
Most popularUp to 5 sites, with a year of updates and support.
$99/year
Secure checkout. Cancel any time.
25 sites
Up to 25 sites, with a year of updates and support.
$199/year
Secure checkout. Cancel any time.
Need more than 25 sites? Get in touch about a custom licence.
Frequently asked questions
What is a custom order status?
A status of your own that sits beside the ones WooCommerce ships, such as Packing or Ready to collect. Orders can be moved into it from the order screen or a bulk action, and WooCommerce lists and filters them like any other status.
Can I rename or hide WooCommerce's own statuses?
No. The plugin adds statuses and leaves the built-in ones alone.
How do I add a status?
Open WooCommerce, Custom Order Statuses, and use Add a status at the bottom of the list. Give it a name and a colour, choose whether it counts as paid, which emails it sends and what it does to stock, and save. The slug is made from the name and can be at most 17 characters.
Do the emails replace WooCommerce's emails?
No. They are sent in addition. WooCommerce still sends its own emails for its own statuses, and the extra email can be switched off under WooCommerce, Settings, Emails.
Will moving an order to a status reduce stock twice?
No. It uses WooCommerce's own stock functions, which remember what they have already done for an order.
What happens to my orders if I deactivate or delete the plugin?
Every order in one of your statuses is moved into the status you chose for it, so it stays in the orders list. Activating the plugin again moves them back. If you tick Remove data on uninstall, your statuses, settings, rules, buttons, permissions and order history are deleted, but the orders stay where the fallback put them. Moving orders this way sends no email and changes no stock.
What does deleting a status do to its orders?
You are asked where they should go. They are moved there without sending any email or changing stock.
How do the timed and conditional rules work?
A rule says that an order entering one status moves to another, straight away or after a number of hours or days. It can be limited to a payment method, a range for the order total or a customer role. Hours are counted from the moment the order enters the status, and the conditions are checked again when the wait is over.
What happens to a rule if the order has moved on by the time it fires?
Nothing. A waiting rule checks the order again when its time comes, and does nothing if the order has left the status or no longer matches.
Can a rule send an order round in a circle?
No. A rule that would loop back to where it started is refused when you save, and a chain of rules stops after a handful of moves with a note on the order.
What are next-status buttons?
A Next status box on the order edit screen with a button for each status you allow to follow the current one, up to eight, so staff can move an order along in one click.
What can customers be allowed to do in a status?
For each of your own statuses you can allow the Cancel button in My Account, the Pay button or file downloads. A permission only adds to what WooCommerce already allows, so it never removes the Cancel or Pay button from a built-in status.
What does the status history show?
On every order, each move with who made it, when, and how long the order stayed in the status before. The Time in each status screen averages the stays from the 200 most recent orders that have a history.
Do my statuses appear in WooCommerce Analytics?
Yes. Orders in your statuses are recorded under their own names, and the statuses can be chosen in Analytics, Settings and in the order status filter of the Orders report. Pro then makes the figures behave: unpaid statuses are left out by default and paid ones are given a payment date.
What does Pro change about how Analytics counts my orders?
Three things. Statuses that do not count as paid are left out of the totals by default, an order entering a paid status gets a payment date so it lands in the right period, and a rebuild button re-imports the orders in your statuses. The first two can be switched off on the plugin's own Analytics screen. A selection you have saved under Analytics, Settings always wins over the default, and WooCommerce's own statuses are counted as before.
Why is an order in my status missing from Analytics, Orders?
By default Analytics dates orders by the day they were paid, and WooCommerce records that date itself only for Processing and Completed. The plugin adds it when an order enters a paid status of yours, from then on. An order that moved before the plugin was running, or one that has not been paid, has none, so it is absent under that setting. Choose Date created under Analytics, Settings to see it, or tick the plugin's option to give orders already in a paid status a payment date and press rebuild.
Does leaving statuses out of Analytics work on every version of WooCommerce?
Leaving unpaid statuses out by default needs WooCommerce 11.2 or newer, because older versions give a plugin no way to set that default. On an older version you choose the exclusions yourself under Analytics, Settings. Everything else on the plugin's Analytics screen is unchanged.
Does Analytics show everything for my statuses?
The Orders report follows the order status filter. WooCommerce's Revenue and Products reports ignore it, which is how WooCommerce built them, and the plugin does not change that. Orders that have not been paid have no payment date, so under the default date type they are absent from Orders and Revenue whichever status they are in.
Does it work with the block checkout and High-Performance Order Storage?
Yes. Statuses apply after an order exists, so the classic and block checkouts behave the same, and order data is read and written through WooCommerce's own order functions.
Does it send any data out?
Your statuses, settings and orders stay on your site. The licence check and the update check contact PluginCity, and send the licence key, the site address and the plugin version. Nothing else is sent.
How do I install it and what does it need?
Download the ZIP from your PluginCity account, then go to Plugins, Add New, Upload Plugin, choose the ZIP and click Install Now. If an earlier copy of the plugin is already installed, choose Replace current with uploaded: every status, setting and order you have is kept. It needs WordPress 6.7 or later, WooCommerce 10.0 or later with WooCommerce active, and PHP 8.1 or later. There is nothing else to install alongside it.
How do updates and the licence key work?
Paste your licence key under WooCommerce, Custom Order Statuses, Licence. Updates then arrive on your Plugins screen like any other, and the key keeps the Pro screens editable. A new install has 14 days before that starts to matter.
What happens if my licence lapses?
Nothing is deleted and nothing breaks. Your statuses, emails, stock changes and bulk actions carry on exactly as before. Rules stop moving orders, the buttons and the history stop appearing, customers can do only what WooCommerce allows, and the Analytics defaults stop being applied. The Pro screens stay readable but cannot be changed, and renewing switches it all back on as you left it.
More plugins

Estimated Delivery Dates for WooCommerce
Tell customers when their order will arrive, and your team when it has to leave. Estimates on the product page, cart, checkout and emails.

Minimum Order for WooCommerce
Set a minimum spend or quantity before checkout, with clear messaging that tells customers exactly what to add.

Free Shipping Bar for WooCommerce
Show customers how close they are to free shipping, with a progress bar on the cart, at checkout and in the mini-cart.

Delivery Instructions for WooCommerce
Gives customers one clear box at checkout for delivery or shipping instructions, on the classic checkout and the Checkout block, and shows what they wrote on the order and in your emails.

Stock Alerts for WooCommerce
Lets customers leave their email address on a sold-out product or variation, and emails them when it can be bought again. A change in the stock number on its own sends nothing.

Product Expiry Dates for WooCommerce
Give a product a date it can no longer be sold after. It comes off sale when that date passes, and a basket still holding it cannot be checked out.