YS FluentCart Order Statuses
FluentCart × Custom Order Workflow: Send to production, schedule shipping, and other custom statuses, prevent overwriting after payment, automatic email notifications on status changes, one-click workflow advancement for every order directly from the order page, includes workflow reports.
FluentCart's built-in order statuses are limited to processing, completed, and cancelled. However, stores handling purchasing agents, custom manufacturing, or pre-orders need their own workflows like "Paid → Send to Production → Scheduled for Shipping → Shipped." This plugin lets you add custom order statuses and shipping statuses in the backend—allowing you to configure the name, color, description, and payment terms. FluentCart's native dropdown menus, order lists, advanced filters, and customer order pages will all automatically adopt them. It leaves FluentCart's core completely untouched, accomplishing everything via public filters and REST.
Will not be overwritten by FluentCart after payment
FluentCart changes the order status to "Processing" upon receiving payment, and this logic is hardcoded without a filter. During the same payment process, the plugin writes your custom status back and leaves a note in the order's activity log. Each status can be set to either "Keep" or "Let FluentCart decide," and there is also a master switch. Since revenue reports are based on payment status, custom order statuses do not affect revenue figures at all.
Automatically send an email to the customer upon status change
Each custom status can enable email notifications—one for the customer and one admin copy, with independent switches. The notifications register directly into FluentCart's own "Email Notifications" settings page: using FluentCart's toggles, subject field, preview feature, and sender settings, while the email wrapper, header, and footer are also consistent with FluentCart's built-in emails; titles and body paragraphs can be filled out directly on the same editing page, supporting FluentCart shortcodes like {{order.invoice_no}} and {{order.customer.full_name}}. All are disabled by default and will only be sent when turned on.
Every order can be processed through the workflow on the order page.
The FluentCart backend itself does not have a control for freely selecting order statuses—regardless of whether an order is paid or not, it only has fixed buttons like "Mark as Complete", "Revert to Processing", and "Cancel Order" (tested in versions 1.6.0 and 1.6.3). The plugin adds an "Order Flow" panel to the order page: it displays the current step, lists the statuses this order can be moved to, and features a "Next Step" button for one-click progression. Each custom status applies to all orders by default, meaning paid and unpaid orders see the exact same list; only when necessary are payment conditions restricted in the status's "Advanced" settings. Writing goes through FluentCart's own order API, so activity logs, status change events, and item fulfillment behaviors are completely identical to changing the status manually; disallowed changes are explained in plain language directly next to the panel.
Two process templates, create with one click
The "Tools" tab allows you to create a standard workflow with one click: Send to Production -> Schedule Shipment -> Shipped. You can place it in either the order status or the shipment status—the latter is our recommended approach because FluentCart never automatically overwrites shipment statuses, and custom shipment statuses will appear directly in FluentCart's own "Change Shipment Status" dialog. The template will not change the names of FluentCart's built-in statuses, nor will it overwrite content you have already configured, and applying it twice will not create duplicates. If needed, you can enable strict mode to require orders to proceed one step at a time.
Process Report and Stuck Ticket List
The "Order Status Report" tab lays out the entire workflow: order counts and amounts for each status (broken down by paid/unpaid), the process funnel, average and maximum dwell time for each step, and a list of orders stuck in the same step for more than N days. Each table can be downloaded as a CSV (Excel opens Chinese characters correctly without garbled text). An optional daily summary email is available. The order list now includes saved views for each custom status, and the order page also features a dual-axis combined status history timeline.
Compatibility and Updates
Available starting from FluentCart 1.6.0 (tested and verified on both 1.6.0 and 1.6.3). Settings can be fully exported/imported as JSON; before removing a status, you can use "Move Orders" to batch transfer orders to another status. Deactivating the plugin will not alter any order data. The YS Plugin Hub update mechanism is built-in, so after installation, you will receive new version notifications directly on the WordPress plugins page and can update with a single click. The interface is available in English and Traditional Chinese.
Features
Custom order and shipping statuses
Name, color, description, payment terms, sorting; FluentCart's dropdown menus and lists apply them directly.
Keep custom status after payment
When FluentCart processes a payment, it changes the status to "Processing," and the plugin automatically writes it back and leaves a note in the activity log.
Status change email notification
For each status, you can enable customer notifications and administrator copies, and edit the subject, title, and body directly on the FluentCart email notification settings page.
Order page flow control
Every order status can be updated directly: paid and unpaid orders are in the same list, advanced with a single click, using FluentCart's own API.
One-click workflow template
In production → Scheduled for shipping → Shipped. This can be set as the order status or shipping status; do not change the built-in status names; strict mode can be enabled.
Process Report and Stuck Ticket List
Number and amount of orders for each status, funnel, dwell time, stuck orders; CSV download available for each table, optional daily summary email.
Screenshots
Changelog (Latest)
A status is now one list, on every order.
What changed in 0.5.0
- The templates no longer restrict their steps by payment. *In production*, *Shipment scheduled* and *Shipped* used to be *paid orders only*, so an unpaid order was offered a different list from a paid one. They are now *any order*, the same default a status added by hand has always had. The "keep this status after payment" guard is unchanged: it is protection against FluentCart overwriting the status with *Processing*, not a restriction.
- The templates no longer rename FluentCart's built-in statuses. No more "Paid", "Awaiting payment" or "Awaiting production" relabelling; FluentCart's own names are left as they are. The *Built-in labels* tab still renames them if a shop wants to.
- The two payment settings moved under *Advanced*. *Available on* and *After payment* are no longer columns of the order-status table. They sit behind a collapsed *Advanced* line under each status, whose summary always shows their values and turns amber when either differs from the default.
- Corrected documentation of FluentCart's native controls. Measured on 1.6.0 and 1.6.3: FluentCart's admin has no control for choosing an order status on *any* order — only *Mark As Complete*, *Back to processing* and *Cancel Order* — and the Orders list's bulk actions only delete. Earlier docs said the gap was specific to paid orders and that the Orders list had a bulk status action; both were wrong.
An existing configuration is not changed by the upgrade.
Tested on FluentCart 1.6.0 and 1.6.3: 293 unit assertions and 375 REST-driven scenario assertions on each version. Requires WordPress 6.0+, PHP 7.4+, FluentCart 1.6.0+. English and Traditional Chinese (zh_TW). See `CHANGELOG.md`.
FAQ
Will the FluentCart core be modified?
No. Everything is done completely through FluentCart's public filters (order_statuses, editable_order_statuses, shipping_statuses, email_notifications, etc.) and REST, so updating FluentCart will not overwrite anything.
Why does the order status change to "Processing" after payment?
This is the behavior of the FluentCart core (hardcoded, no filters). The plugin writes custom statuses back within the same process; each status can be set to "retain" or "let FluentCart decide".
Where are the notification emails set up? Can the free version of FluentCart change the body text?
In FluentCart → Settings → Email Notifications, a new set of "Custom Order Statuses" will appear. The toggle, subject, and preview belong to FluentCart itself; the title and body paragraph are fields added by the plugin to the same edit page, which can be filled in even with the free version. The full block editor still requires FluentCart Pro.
Why doesn't the native FluentCart backend allow me to directly select my custom order status?
FluentCart's backend didn't have a dropdown menu for "freely selecting order status" in the first place (tested in versions 1.6.0 and 1.6.3). Regardless of whether an order is paid, there are only fixed buttons like Completed, Refund Processing, and Cancelled. Therefore, the plugin adds controls to the order page, listing all custom statuses in the same list. Fulfillment status is different: custom fulfillment statuses will directly appear in FluentCart's own "Change Fulfillment Status" dialog box.
Should the process be placed in the order status or the shipping status?
If the process starts only after the customer pays (production, packaging, scheduling, shipping), it is recommended to use the shipping status: FluentCart never automatically changes it, and the built-in "Change Shipping Status" dialog works on paid orders. Only use the order status if it truly belongs to the order itself or if you want customers to see it in their order status.
Will disabling or removing the plugin affect orders?
Deactivating does not modify any order data, and settings and history will still be available after reactivating. Removing also preserves the settings and history tables unless YS_FCT_STATUS_REMOVE_DATA is defined in wp-config.php.
