How to Add Custom Order Status in WooCommerce? (2025 Guide)
How to add custom order status in WooCommerce? It’s a question that pops up when store owners want more control over how their orders move through the process.
Maybe you want to mark an order as “Awaiting Pickup” or “Packaging in Progress” — things WooCommerce doesn’t include by default.
➡ In this article:
You’ll learn how to create your own order statuses, and even better — how to make them work automatically.
We’ll walk you through how to make order updates smarter and hands-free.
If you’ve ever wished WooCommerce could follow your own rules, this guide is for you.
Why Custom Order Statuses Matter in WooCommerce?
WooCommerce comes with a few basic order statuses like “Processing,” “On Hold,” and “Completed.”
These work fine for simple stores.
But what if your business has more steps before an order is truly done?
Let’s say you run a small bakery, after someone places an order, you need time to bake, pack, and prepare it for pickup.
The default WooCommerce statuses don’t really show those steps.
That’s where custom order statuses come in — you can add your own, like “Baking,” “Ready for Pickup,” or even “Awaiting Customer Confirmation.”
It’s not just for bakeries.
If you sell custom-made products, you might need statuses like “In Design” or “Waiting for Approval.”
If you offer local delivery, you might want a “Driver Assigned” status.
➡ In short, custom order statuses help you:
- Keep your team organized, especially if more than one person is involved in handling orders.
- Update customers more clearly so they know exactly what’s happening with their purchase.
- Automate your order process by linking each step to a smart rule (we’ll show you how soon).
They make your store feel more professional, and a whole lot easier to manage.
Common Scenarios Where Custom Order Status Helps
Not every order follows the same path.
That’s why having extra order statuses can make a big difference, especially in these real-life situations:
-
Made-to-Order Products
If you sell something that isn’t ready-made — like cakes, T-shirts with custom prints, or personalized gifts — you might need extra steps.
➡ Example statuses:
-
- “In Production”
- “Ready for Review”
- “Waiting for Custom Details”
-
Local Pickup or Delivery
For stores that offer pickup or local delivery, you probably want to let customers know when their order is ready or out for delivery.
➡ Example statuses:
-
- “Ready for Pickup”
- “Driver on the Way”
- “Pickup Delayed”
-
Manual Checks or Internal Review
Maybe you need to check payments manually, verify something, or wait for team approval.
➡ Example statuses:
-
- “Payment Under Review”
- “Awaiting Team Approval”
- “Quality Check in Progress”
-
Pre-Orders or Backorders
If you take orders before the product is in stock, the default statuses don’t really help.
➡ Example statuses:
-
- “Pre-Order Confirmed”
- “Waiting for Stock”
- “Shipping Soon”
-
Returns or Exchanges
Even after delivery, you may want to track the return or exchange process.
➡ Example statuses:
- “Return Requested”
- “Exchange Approved”
- “Refund in Progress”
These are just a few examples.
The idea is simple:
if your store has steps that WooCommerce doesn’t show by default, custom order statuses can help you fill in the gaps, and keep everything clear for both your team and your customers.
What Default WooCommerce Order Statuses Are Missing?
WooCommerce comes with a few standard order statuses like:
- Pending Payment
- Processing
- On Hold
- Completed
- Cancelled
- Refunded
These work fine for a basic online store.
But if your business has extra steps in the process, you might start to feel like something’s missing.
You may be interested in:
Best 5 PDF Invoicing for WooCommerce Plugins
How to Add a Custom Order Status Using Code (No Plugin)
With a little bit of code, you can easily add your own.
You don’t need to be a developer, and we’ll keep things super simple.
There are two easy ways to use the code:
1. Paste it into your child theme’s functions.php file
2. Or, use a plugin like Code Snippets to safely add the code without touching theme files.
Let’s say you want to add a new status called “Awaiting Pickup.” Here’s how to do it:
1. Paste Code into Your Child Theme’s functions.php File
-
Step 1: Make Sure You’re Using a Child Theme
A child theme is like a copy of your main theme where you can safely make changes.
If you don’t have one set up yet, you can:
-
- Use a plugin like Child Theme Configurator to generate it in one click.
- Or, ask your developer to set it up if you’re unsure.
⚠️ Warning: Don’t add code to your main theme directly — it may get erased when the theme updates.
-
Step 2: Access Your Theme Files
There are two ways to do this:
-
- 🟢 Option A: Use WordPress Admin (Easiest)
1. Go to your WordPress dashboard.
2. Navigate to Appearance > Theme File Editor.
3. On the right side, click on the file named functions.php under your child theme.
4. Scroll to the bottom of the file.
5. Paste the code snippet after any existing code (but inside the closing ?> tag if there is one — or just skip that line entirely if it doesn’t exist).
6. Click “Update File.”
-
- 🔵 Option B: Use FTP or Hosting File Manager (Advanced)
1. Log in to your hosting control panel (like cPanel) or connect via FTP.
2. Navigate to wp-content/themes/your-child-theme-name/
3. Open the functions.php
file in a text editor.
4. Paste the code at the bottom, save, and upload.
-
Step 3: Check That It Worked
- Go to WooCommerce > Orders.
- Open any order.
- Look at the Order Status dropdown on the right.
- You should see “Awaiting Pickup” listed as a new option!
💡 Tip:
If something goes wrong (like a white screen), you can undo your changes by removing the code. That’s why using a child theme or a plugin like Code Snippets is safer.
2. Add a Custom Order Status in WooCommerce Using Code Snippets Plugin
-
Step 1: Install the “Code Snippets” Plugin
1. Go to your WordPress Dashboard.
2. Navigate to Plugins > Add New.
3. In the search bar, type Code Snippets.
4. Find the plugin by Code Snippets Pro (it’s very popular and free).
5. Click Install Now, then click Activate.
-
Step 2: Add a New Snippet
1. After activating, go to Snippets > Add New from your dashboard menu.
2. Give your snippet a name like:
Add Custom Order Status: Awaiting Pickup
(This is just for your reference.)
-
Step 3: Paste the Code
Below is a clean snippet that shows how to add custom order status in WooCommerce using just a bit of beginner-friendly PHP code.
In the big code box, paste the following snippet:
// 1. Register the new order status
function wp_custom_register_awaiting_pickup_status() {
register_post_status('wc-awaiting-pickup', array(
'label' => 'Awaiting Pickup',
'public' => true,
'exclude_from_search' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'label_count' => _n_noop('Awaiting Pickup (%s)', 'Awaiting Pickup (%s)')
));
}
add_action('init', 'wp_custom_register_awaiting_pickup_status');
// 2. Add the status to the list of WooCommerce order statuses
function wp_custom_add_awaiting_pickup_to_order_statuses($order_statuses) {
$new_statuses = array();
// Insert new status after processing
foreach ($order_statuses as $key => $status) {
$new_statuses[$key] = $status;
if ('wc-processing' === $key) {
$new_statuses['wc-awaiting-pickup'] = 'Awaiting Pickup';
}
}
return $new_statuses;
}
add_filter('wc_order_statuses', 'wp_custom_add_awaiting_pickup_to_order_statuses');
-
Step 4: Choose Where to Run the Snippet
Below the code box, choose:
Run snippet everywhere (this is the default and correct for this use case).
-
Step 5: Save and Activate
1. Click the blue “Save Changes and Activate” button.
2. That’s it! The snippet is now live.
-
Step 6: Test It
- Go to WooCommerce > Orders.
- Open any order.
- Look at the “Status” dropdown on the right side.
- You should now see “Awaiting Pickup” listed as an option.
💡 Bonus Tip:
Want to Add More Custom Statuses?
Just duplicate the code and change the status name/slug. For example:
'wc-in-production' => 'In Production'
Be sure each new status has a unique slug (like wc-your-status-name
).
Making Your New Status Appear in the Right Places
So, you’ve added your custom order status — like “Awaiting Pickup” — and it shows up in your WooCommerce dashboard.
That’s great! But how do you make sure it appears everywhere it should?
Let’s walk through the main places your new status needs to show up, and how to make that happen:
-
A) Show the Status in the Orders List (Admin Panel)
This step is already handled in the code we added earlier — thanks to this part:
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
✅ That means your new status will appear:
-
- In the WooCommerce Orders table
- In the filter dropdown so you can search for orders with that status
- In the order edit screen dropdown (where you manually change statuses)
-
B) Include It in Customer Emails
WooCommerce only sends emails for certain default statuses like “Processing” and “Completed.”
If you want to send emails when your custom status is set, you’ll need to tell WooCommerce to treat it like an email trigger.
That takes a bit more code, but here’s a quick example to help you get started:
// Add "Awaiting Pickup" to email triggers
add_filter( 'woocommerce_email_actions', function( $actions ) {
$actions[] = 'woocommerce_order_status_awaiting-pickup';
return $actions;
});
This adds your status to the list of email triggers, so you can now set up a custom email using a plugin like:
-
- WooCommerce Additional Custom Emails & Recipients or WooCommerce Email Customizer
- Or just hook into WooCommerce’s email system manually
-
C) Display It to Customers (My Account Page)
If you want your customers to see this new status clearly in their order history, you’re in luck!
WooCommerce will usually show any registered status automatically on the My Account > Orders page.
But if you’re using a custom theme or plugin that hides unknown statuses, just make sure you’ve used this in your code:
'public' => true,
✅ This tells WooCommerce: “Yes, it’s okay to show this status to customers.”
-
💡 Wrap-Up
Once you’ve added the code correctly:
-
- You’ll see the new status in your dashboard
- Your team can filter and work with it
- And your customers will feel more informed about what’s happening with their orders
You may be interested in:
Top 5 Email Marketing Best Practices to Boost Conversions
How to Trigger Your Custom Status Automatically?
After you’ve learned how to add custom order status in WooCommerce, you might be thinking:
“Do I have to change it manually every single time?”
The good news? Nope, not if you automate it.
Let’s say you want orders to switch to “Awaiting Pickup” 2 hours after they’re marked as “Processing.” Doing that by hand every time would be a pain, and easy to forget.
That’s where automation comes in.
Two Ways to Trigger Order Status Changes Automatically
-
Option 1: Use Your Own Code (Advanced Users Only)
You can write custom PHP functions with conditions like:
-
- Change to “Awaiting Pickup” after 2 hours
- Change to “In Production” if the order total is above $100
- Or switch status based on shipping method, product type, etc.
But this method is tricky.
It takes time, testing, and code skills, and if one part breaks, it can mess up your order flow.
-
Option 2: Use a Plugin (Way Easier)
If you’re not a developer, there’s a much simpler and safer way to do this.
This is exactly what the WooCommerce Scheduled & Automatic Order Status Controller plugin was built for.
You can set rules like:
-
- “Wait 3 hours, then change to Awaiting Pickup”
- “If payment method is Bank Transfer, move to ‘Awaiting Payment Confirmation’”
- “If the order has a product from a certain category, switch to ‘Ready for Packaging’”
And it all works without code. Just set the conditions once, and the plugin takes care of it.
Why Automating Your Statuses Matters?
- It saves time — no more clicking through orders all day.
- It reduces mistakes — no forgetting to update status manually.
- It improves your workflow — your team always knows what’s next.
- It keeps customers informed — they can see real progress in their account.
What Does This Plugin Actually Do?
This plugin lets you create smart rules to automatically change the status of an order when certain things happen — like:
- After a set time (example: 1 hour after “Processing”)
- Based on total price or payment method
- Depending on the shipping method
- Or even just at a specific date and time
And it all works without touching code. Just fill out the fields, choose your conditions, and hit save.
➡ Example:
Let’s say you want orders that are “Processing” to automatically change to “Awaiting Pickup” after 2 hours, this plugin can do that with just a few clicks.
Or maybe you want orders with Cash on Delivery to go to “Ready to Ship”, easy.
Why This Plugin Is a Perfect Match for Custom Statuses?
You’ve already added your new status, but now it’s time to put it to work.
This plugin connects the dots:
- It recognizes your custom statuses
- It lets you set smart rules that use them
- And it keeps your store organized without all the manual effort
Final Thoughts: Manual Setup + Smart Automation
Knowing how to add custom order status in WooCommerce might seem tricky at first, but once you know how, it’s pretty straightforward — and super useful.
Here’s a quick recap to keep everything clear:
- You can add custom order statuses (like “Awaiting Pickup” or “In Production”) using a small bit of code — no plugin required.
- These statuses make your order system clearer for both you and your customers.
- Changing statuses manually works, but it takes time, especially when you have lots of orders coming in.
- That’s why automation matters, with the right plugin, your order updates happen automatically, based on smart rules you control.
- The WooCommerce Scheduled & Automatic Order Status Controller plugin gives you the freedom to automate order progress, without needing to touch any code.
So if you’re ready to stop updating orders by hand and start building a smoother workflow, combining a custom status with automation is the best move.
You don’t need to be a developer, just a store owner who wants things to run a little smarter.