Overview
↑ Back to topOrder Workflows turns WooCommerce order management into an orchestrated workflow: define the statuses your fulfillment actually uses, the transitions between them, and the rules that trigger them automatically. Each status gets a color-coded badge with an icon, optional email notifications fully integrated with WooCommerce’s email system, workflow transitions with one-click action buttons, and automation rules that assign statuses based on order conditions. Every status change is recorded in a transition log.
Installation
↑ Back to top- Upload the
order-workflowsfolder to the/wp-content/plugins/directory - Activate the plugin through the ‘Plugins’ menu in WordPress
- Navigate to WooCommerce > Settings > Advanced > Order Workflows and toggle Enable Plugin on (it ships disabled by default)
Requirements
↑ Back to top- WordPress 6.4 or higher
- WooCommerce 9.0 or higher
- PHP 7.4 or higher
Settings
↑ Back to topAccess settings at WooCommerce > Settings > Advanced > Order Workflows.
General
↑ Back to top| Setting | Description | Default |
|---|---|---|
| Enable Plugin | Master switch: when disabled, no custom statuses, workflows, emails, or automation rules are active. Your configuration is kept. | Disabled |
Statuses
↑ Back to topCreate and manage custom order statuses, and customize the appearance of core WooCommerce statuses.
Each custom status has:
| Field | Description |
|---|---|
| Name | Display name shown everywhere (orders list, order edit, My Account, emails) |
| Slug | Internal identifier (stored as wc-{slug}) |
| Description | Internal note about the status purpose |
| Color / Text color | Badge background and text colors |
| Icon | Dashicon shown next to the status |
| Badge style | Filled or outlined |
| Counts as paid | Treat orders in this status as paid for payment logic |
| Include in reports | Include orders in WooCommerce reports and analytics |
| Customer description | Optional text shown to the customer in My Account |
Core WooCommerce statuses (Pending payment, Processing, On hold, Completed, Cancelled, Refunded, Failed) can be customized too: change their badge color and icon.
Drag and drop to reorder statuses.
Workflow
↑ Back to topDefine which statuses can follow each status. When a workflow is configured:
- Next-status action buttons appear in the orders list for one-click transitions
- “Change to X” actions are added to the order actions dropdown on the order edit screen
Both custom and core statuses support workflow transitions, an action button label, and an action button icon.
Emails
↑ Back to topEach custom status automatically registers an email notification in WooCommerce’s native email system (WooCommerce > Settings > Emails). For each status email you can configure:
- Enable/disable
- Recipient: customer, admin, both, or a custom address
- Subject and heading with placeholders:
{site_title},{order_date},{order_number},{status_name} - Additional content shown below the order table
- Email type (HTML or plain text)
Email templates can be overridden in your theme: copy templates/emails/customer-order-status.php (and templates/emails/plain/customer-order-status.php) from the plugin.
Automation
↑ Back to topAuto-assignment rules automatically set an order’s status at checkout or when payment completes. The first matching rule (by priority) wins.
Each rule has:
| Field | Description |
|---|---|
| Name | Rule label |
| Target status | Status assigned when the rule matches |
| Trigger | At checkout, on payment complete, or both |
| Match type | All conditions (AND) or any condition (OR) |
| Priority | Lower runs first |
| Conditions | Payment method, order total, user role, shipping method, product type, product category, coupon used, customer country |
Advanced
↑ Back to top| Feature | Description |
|---|---|
| Import / Export | Export your full configuration (settings, statuses, rules) as JSON, and import it on another site |
| Workflow Templates | Apply pre-built status workflows (e.g. Local Pickup) in one click |
| Custom CSS | Add custom CSS for status badges and styling |
Transition Log
↑ Back to topEvery order status change is recorded with the order ID, old and new status, the user who made the change, the source (manual, bulk, auto rule, system), and a timestamp. The log offers:
- Statistics: total transitions, last 30 days, per-status counts
- Filters: order ID, status, source, date range
- CSV export
Orders List Integration
↑ Back to top- The order status column shows color-coded badges with your configured colors and icons
- Next-status action buttons appear based on your workflow configuration
- Bulk actions let you change the status of multiple orders at once
- Custom statuses appear in the orders list status filter
My Account Integration
↑ Back to topCustomers see the custom status name for their orders in My Account. If a status has a customer description, it is displayed on the order view page.
How It Works
↑ Back to top- Create a custom status in the Statuses tab (e.g. “Ready for Pickup”)
- The plugin registers it as a WordPress post status and a WooCommerce order status
- Optionally define workflow transitions, enable the email notification, and create automation rules
- Change order statuses from the order edit screen, the orders list action buttons, bulk actions, or automatically via rules
- Every transition is recorded in the log
Deactivation & Uninstall
↑ Back to top- On deactivation: no data is deleted. Orders keep their status value; custom status labels display as raw slugs until reactivation.
- On uninstall (deletion): the plugin removes its database tables, options, and per-status email settings.
Developer Hooks
↑ Back to topThe plugin uses WooCommerce’s native hooks throughout. Key integration points:
| Hook | Type | Description |
|---|---|---|
wc_order_statuses | filter | Custom statuses are added here |
woocommerce_order_is_paid_statuses | filter | Statuses with “Counts as paid” are added here |
woocommerce_reports_order_statuses | filter | Statuses with “Include in reports” are added here |
woocommerce_valid_order_statuses_for_payment | filter | Custom statuses are valid for payment |
woocommerce_email_classes | filter | Per-status email classes are registered here |
woocommerce_order_status_changed | action | Transitions are logged from this hook |
Database
↑ Back to topThe plugin creates two tables:
{prefix}osm_custom_statuses: status definitions (custom and core overrides){prefix}osm_transition_log: status change history
REST API
↑ Back to topNamespace: osm/v1. All routes require the manage_woocommerce capability.
| Route | Methods | Description |
|---|---|---|
/settings | GET, POST | Plugin settings |
/statuses | GET, POST | List / create custom statuses |
/statuses/{slug} | PUT, DELETE | Update / delete a status |
/statuses/reorder | POST | Reorder statuses |
/core-statuses | GET | Core statuses with overrides |
/core-statuses/{slug} | PUT | Update a core status override |
/rules | GET, POST | Automation rules |
/rules/{id} | PUT, DELETE | Update / delete a rule |
/templates | GET | Workflow templates |
/templates/{id}/apply | POST | Apply a template |
/transition-log | GET | Log entries with filters |
/transition-log/stats | GET | Log statistics |
/transition-log/export | GET | CSV export |
/export | GET | Full configuration export |
/import | POST | Full configuration import |
HPOS Compatibility
↑ Back to topOrder Workflows is fully compatible with WooCommerce High-Performance Order Storage (HPOS) and Cart/Checkout Blocks.
Support
↑ Back to topFor support, feature requests, or bug reports: