"On Hold" doesn't tell you why the order is on hold.
Three different orders, three different blockers, one bucket called "On Hold". The fulfillment team opens each order to read the notes. Customer support has no idea what to tell anyone.
The order statuses your real workflow actually needs.
Add Awaiting Pickup, In Production, Quality Check, Awaiting Stock, Returned - whatever fits how you ship. Each status gets its own color, icon, customer email, quick-action button, and rules for editability, payments, and downloads. $49.99/yr or $149 once.
→ In Production→ Ready for Pickup→ CompletedOut of the box, WooCommerce gives you Pending, Processing, On Hold, Completed, Cancelled, Refunded, Failed, and Draft. That's it. The moment a real workflow needs Awaiting Pickup, In Production, Quality Check, or Awaiting Stock, you start abusing existing statuses, sticking notes in the order, or paying for a workflow tool you don't need.
Three different orders, three different blockers, one bucket called "On Hold". The fulfillment team opens each order to read the notes. Customer support has no idea what to tell anyone.
Native "Processing" tells the customer nothing. They wait. They email. They open a chargeback. Real statuses (Awaiting Pickup, Ready for Shipment, In Production) cut support tickets by giving the customer something concrete to read.
Order notes, tags, custom meta - none of them appear in bulk actions, none trigger emails, none show in WooCommerce Analytics. You're tracking state in three places, and only one of them is the order list.
The plugin does four jobs: add unlimited statuses with colors, icons, and labels, configure per-status behavior (editable, paid, downloads, customer-visible), automate with quick-action buttons and emails, and integrate with bulk actions, reports, and WooCommerce Analytics.
Pick a label, a slug, a text color, a background, an icon. Save. The status is registered as a first-class WooCommerce status the same second.
Define a button per status: icon, color, target status, optional confirm prompt. Fulfillment clicks once on the order list - the status changes, the email goes out.
Each status fires its own email with editable subject, heading, and body. Same templating as the built-in WooCommerce emails - so the customer experience stays consistent.
The difference between a real WooCommerce status and a tag. These flags are why custom statuses behave like Processing or Completed, not like a sticky note.
Custom statuses show up in WooCommerce's native bulk-action dropdown. Filter the orders list, select all, change status, done.
Customer-facing statuses appear on My Account. Internal ones (QC pass, restock pending, batch-staged) stay invisible. One toggle per status.
Works with both the new high-performance order tables and legacy postmeta. Custom statuses are exposed via REST so external systems read and write them.
Upload the .zip from Plugins → Add New, then activate. The Custom Order Statuses menu shows up under WooCommerce.
Pick a label, a slug, an icon, text color, background color. Save. The status is now usable everywhere a built-in status is.
Counts as paid? Records date paid? Grants downloads? Editable? Visible to customer? Send an email on transition? Check the boxes that fit.
Change a single order from the status dropdown, click the quick-action button, or bulk-change 50 orders at once. Reports update immediately.
WooCommerce native · 8 statuses |
WC Order Status Manager $49/yr · no lifetime |
YITH Custom Order Status from €79.99/yr · no lifetime |
WPFactory $49.99/yr · $149 once |
|
|---|---|---|---|---|
| core: creating statuses | ||||
| Unlimited custom statuses | ✕ | ✓ | ✓ | ✓ |
| Custom label, slug, icon, colors | ✕ | ✓ | ✓ | ✓ |
| Override / edit core statuses | - | ✓ | ✓ | ✓ |
| Drag-and-drop reorder | ✕ | ✓ | not specified | ✓ |
| per-status rules | ||||
| Counts as paid / records date paid | - | ✓ | paid only | ✓ |
| Grants downloads (digital products) | - | not specified | ✓ | ✓ |
| Order editable / locked per status | ✕ | ✕ | not specified | ✓ |
| Stock reduction control per status | ✕ | ✕ | ✓ | ✓ |
| Customer visibility toggle | ✕ | ✕ | not specified | ✓ |
| automation | ||||
| Per-status email (customer) | ✕ | ✓ | ✓ | ✓ |
| Per-status email (admin / internal) | ✕ | not specified | not specified | ✓ |
| Quick-action buttons on orders list | ✕ | ✓ | ✓ | ✓ |
| Bulk-change orders to a custom status | ✕ | ✓ | ✓ | ✓ |
| integration | ||||
| Shows in WooCommerce Analytics | - | ✓ | ✓ | ✓ |
| HPOS-compatible | - | ✓ | ✓ | ✓ |
| REST API exposes custom statuses | - | not specified | not specified | ✓ |
| WPML / Polylang translation | - | not specified | ✓ | ✓ |
| pricing & ownership | ||||
| Free version on .org | - | ✕ | ✕ | ✓ |
| Lifetime tier | - | ✕ | ✕ | ✓ $149 unlimited sites |
| Multi-store licensing | - | per site | per site | ✓ unlimited sites |
| 10-year cost | $0 | ~$490 | ~$800+ | $149 |
| 50+ plugins (All Access) | - | ✕ | ✕ | ✓ $499 |
|
Ready to add the statuses your workflow actually needs? ↓
Jump to pricing
|
||||
A Berlin clothing studio sews each piece on demand. The native "Processing" status lasted them three weeks before they ran out. Now: Awaiting Stock → In Production → Quality Check → Ready for Pickup, with a customer email on the first and last, and silent transitions for the middle two.
Fulfillment team stopped opening order notes to figure out which orders were at which stage. "Where's my order?" tickets dropped from 12/week to 2.
A B2B warehouse picks orders before the customer's credit-card capture clears, then ships once payment is confirmed. They built three statuses: Picking, Packed, Shipped - with "counts as paid" set per status, and Grant Downloads only on Shipped so the PDF dispatch note doesn't go out early.
Accounting stopped guessing which Processing orders were actually paid. Day-end revenue numbers match the Stripe payout to the cent.
A repair shop accepts in-store drop-offs as WooCommerce orders. The customer sees three statuses (Received, Quote Sent, Ready for Pickup). Internally, the mechanics use Diagnosing, Awaiting Parts, In Repair, QC. Six internal statuses, three customer-facing. One toggle per status.
Phone-call interruptions to ask "is my bike done?" dropped to near zero. Mechanics close one ticket per shift instead of fielding ten.
Using the plugin? Leave a review on WordPress.org.
"I really liked the plugin and the technical support is fast and very helpful. I recommend!"see review →
"Exactly what we needed for our made-to-order workflow. Four custom statuses, customer-facing emails on the right ones, internal on the rest. Setup took 15 minutes."see review →
"The per-status flags (paid, downloads, editable) are the whole point. We tried two other plugins; only this one let us hold downloads until our 'Shipped' status."see review →
Every WPFactory plugin ships with the same eight guarantees. Here's what running this one looks like in practice.
Registers statuses through the native WooCommerce hook. No extra database tables, no background cron, no admin-page slowdown. Frontend impact: zero. Admin impact: a few extra options in the status dropdown.
Every filter is documented (status registration, behavior flags, email triggers, visibility rules). Step-by-step guides for the common workflows: made-to-order, 3PL, repair shop, B2B holds.
Email-only, replies within one business day. Bug reports become releases within days, not quarters. See Helen's 5-star review: "the technical support is fast and very helpful."
14-day refund on yearly and lifetime, 30 days on All Access, no questions asked. If a per-status flag doesn't behave the way you'd hoped, support helps; if it still doesn't fit, you walk away whole.
All Access is $499 once for all 50+ plugins, lifetime, unlimited sites, and it includes every plugin we release later. Three lifetime licenses at $199 already cost $597, so the bundle usually wins by your third plugin.
v1.9.4 shipped recently. Tested against the latest WooCommerce within days of every release. HPOS-ready, PHP 8.3 compatible. Tracks the WC order roadmap so new status-related changes don't break the plugin.
Compatible with WooCommerce Subscriptions, WooCommerce Analytics, WPML, Polylang, PDF Invoices & Packing Slips, Order Status Rules. Custom statuses exposed via REST API so Zapier and Make.com hook into them.
You don't need to know what a WooCommerce hook is. Click Add Status, type a label, pick a color, save. Buttons, emails, and reports follow automatically.
This is what you see inside WordPress once the plugin is activated.
14-day refund on yearly and lifetime, 30 days on All Access. Lifetime pays for itself by year 3. All Access pays for itself with any 2nd plugin you'd ever use. Yearly auto-renew can be turned off in your account.
Buy once. Owns itself by year 3. Use on every site you own.
This plugin + 49 others, lifetime updates, unlimited sites - for $300 more than Lifetime alone.
Unlimited custom statuses with their own colors, icons, emails, and quick-action buttons. Per-status rules for editability, payment, downloads, and customer visibility. Native bulk actions, native Analytics, HPOS-ready. 1,000+ stores already running it. 14-day refund if it's not for you.
1,000+ stores · 5.0★ across 6 reviews · WordPress.org plugin · 14-day refund