Skip to content

How Order Progress Works

The bar is driven by the order’s status. This page follows one real order on the demo, #1238, from a bank transfer checkout to Completed. The store had added On hold and a custom Shipped status to its steps.

The customer pays by bank transfer, so WooCommerce puts the order On hold. Every status change is recorded with its date, from the first one, whether or not the plugin shows a bar for it.

With the shipped flow, On hold is not a step. The thank-you page shows the order with no bar at all, and the order’s Order Progress box says why.

The thank-you page of an On hold order with no progress bar

The Order Progress box: this status is not part of your progress flow

After On hold was added to the flow, the same order shows its bar. The status changes were recorded all along, so nothing was lost.

The thank-you page with the bar on its On hold step

The bar always opens with Order Placed, dated when the order was created. Then come the statuses listed under Status Flow, in that order. A step is:

  • Done: Filled with the success color, with the date it was reached.
  • Current: Ringed, with its name and message at the top of the bar.
  • Upcoming: Grey, with no date.

When the shop owner marks the order Processing on the order screen, the bar moves on. The step’s message replaces the previous one.

The bar on Processing

The store’s Shipped status comes from a small status snippet, not from WooCommerce. Once it is in the flow, it is a step like any other, with its own truck icon and message. Here the message uses the {first_name} placeholder.

The bar on Shipped: Good news, Amara: your parcel is on its way

The store also picked Shipped under Step Update Emails, so the customer got an email the moment the order reached it.

Your last success step is the end of the journey. On Completed, every step is filled, and the delivery estimate is replaced by the date the order got there.

The bar on Completed, with every step done

Each step’s date is the moment the order last reached that status. If an order skips a step, for example going straight from Processing to Completed, the skipped step shows as done with no date.

Orders from before the plugin was installed have no recorded changes. For them, Processing uses the paid date, Completed the completed date, and the current step the order’s last change.

Each step carries Days to reach this step. The estimate is the date of the current step, plus the days of every step still ahead. Weekends are skipped by default.

The demo’s flow gives On hold 1 day, Processing 1, Shipped 2 and Completed 3. An order reaching Processing on a Friday is estimated 5 business days later: 2 for Shipped, then 3 for Completed.

  • The estimate is recalculated at every step, from that step’s own date.
  • A late order never shows a date in the past. It shows today instead.
  • A date typed on the order, under Order Progress → Delivery date, replaces the estimate.
  • The estimate shows until the last step. Cancelled and refunded orders have none.

A cancelled, refunded or failed order shows the success steps it really reached, then the failed status in red. Steps it never reached are not shown.

A cancelled order: Order Placed, On hold and Processing, then Cancelled in red

  • Moves it: Any status change, from the order screen, a payment gateway, a bulk action, a shipping plugin or the REST API.
  • Does not: Editing items, adding a note or saving a delivery date. Those do not change the status.
  • Hides it: A status that is not in either flow, such as Pending payment by default. Customers then see no bar, and the Track Order page shows “Current status” instead.