WPMake

← Back to BlogHow to Customize Your WooCommerce Order Status Timeline (Step-by-Step)TUTORIAL

How to Customize Your WooCommerce Order Status Timeline (Step-by-Step)

⏱ 6 min read  ·  👤 david  ·  Sep 1, 2026

WooCommerce ships with one of the least informative order screens in ecommerce: a status word, a table of line items, and nothing that tells a customer what happens next. Post-Purchase Hub replaces the status word with an Order progress list built from your own order statuses, plus a delivery estimate wherever you have given it your shipping times.

This walkthrough covers where the timeline appears, how the status-to-stage mapping actually works, how the estimate is calculated, and what to do when your theme is involved.

Where the timeline shows up

Two places, configured once. The single order page gets the full list. The My Account order list gains a Progress column showing the current stage and its timestamp, so a customer with several open orders sees the state of all of them without opening any.

Front-end order progress timeline showing Placed, Confirmed, Packed, Shipped, Out for delivery and Delivered with an estimated delivery range
Each stage is marked Done, In progress or Not yet, with a real timestamp where one was recorded and an estimated delivery range underneath.

Every stage carries one of three sub-labels — Done, In progress, or Not yet — and the dates shown are real, recorded as the status changes happened rather than calculated backwards.

If you want the timeline somewhere else, the [wpmphub_orders] shortcode and the Order timeline block render it on any page; each signed-in customer sees their own orders.

Mapping your statuses onto stages

This is the step that matters most and the one people rush. The stages themselves are a fixed vocabulary — Placed, Confirmed, Packed, Shipped, Out for delivery, Delivered, plus the terminal states. What you configure is the map: under Settings → Timeline → Timeline stages, every WooCommerce status your store uses gets a dropdown, and you choose which stage it lands on.

Post-Purchase Hub Timeline settings mapping WooCommerce order statuses to customer-facing stages
Status stages: Pending payment → Placed, Processing → Confirmed, Completed → Delivered, and so on. Draft is set to “not shown to customers”.

The defaults are sensible — Pending payment maps to Placed, Processing to Confirmed, Completed to Delivered. Two rules make the rest work:

  • Map every status you actually use. The plugin reads the statuses your store has, including custom ones added by fulfilment or shipping plugins, so they appear in this list too. A status left unassigned contributes nothing to the timeline, which reads to the customer like a stalled order.
  • Leave the internal ones unassigned on purpose. Setting a status to — not shown to customers — is exactly how an internal state stays private. Draft is set that way out of the box; a fraud-review or awaiting-supplier status should be too.

What you cannot do is invent your own stage names — the customer-facing vocabulary is fixed. In practice that matters less than it sounds, because the mapping is many-to-one: three internal statuses that all mean “we have it and are working on it” can all land on Confirmed.

Delivery estimates, and why yours might be blank

The estimate lives under Settings → Timeline → Delivery estimates and is built from two numbers you supply.

  • Handling time — business days between an order being paid for and it leaving you.
  • Handling time per shipping method — an optional override for one method. Leave blank to use the default.
  • Transit time per shipping method — business days in transit, entered as a range (2–4, 4–7) so customers see “arrives between the 26th and the 28th” rather than a single date that will sometimes be wrong.

Both are calculated against the Working days card below them: Non-working days is a set of weekday checkboxes for the days you do not ship on, and Holidays is a plain list, one date per line as YYYY-MM-DD. Everything listed there is excluded from every estimate.

The single most common question about the timeline is why no estimate appears. Almost always the answer is the same: the shipping method used on that order has no transit time configured, and a method with no transit time shows no estimate at all — a deliberate blank rather than a guess. Set it, and the estimate appears.

If you run Advanced Shipment Tracking or WooCommerce Shipment Tracking, real tracking data steps in front of the estimate automatically as soon as a tracking number exists — and any other source can be wired in through a filter. Until then the customer sees your honest estimate rather than a fabricated tracking number, which is worth saying plainly in your order emails too.

Placement, and what to do about your theme

There is one placement setting, on the General tab, and it has two values:

  • Additive — add to my theme’s pages (recommended). The sections are added to the order pages your theme already draws, through WooCommerce’s own hooks. Your templates are untouched.
  • Full replacement — use this plugin’s order page. Takes the layout over entirely.
Post-Purchase Hub General settings showing the Status panel and the Order page display setting
Order page display sits on the General tab. Additive is the default, and the Status panel above it reports any template conflicts it found.

The advice here runs the opposite way to the usual instinct. If your theme heavily customises the order templates, that is a reason to stay additive, not to switch. Full replacement looks different in every theme and the plugin describes it as the single biggest source of support tickets for plugins of this kind — so it also refuses to turn on while it detects that your theme has customised those templates, rather than producing a broken page. The Template conflicts line in the Status panel is where you find out.

The wizard’s Display step asks the same question during setup, with a preview built from a real order in your store.

Setup wizard step asking how the timeline should appear on order pages, with placement options and a preview of the order progress list
The Display step previews the stages using an actual order, so you see the result before a customer does.

For finer visual adjustments, the plugin exposes filters throughout — including the stage map itself — and its markup responds to ordinary CSS in your child theme.

Older orders show stages but no dates

WooCommerce does not keep a history of status changes, so a plugin can only record them from the moment it is installed. Orders that predate the install show their stages without timestamps rather than showing invented ones. Running wp wpmphub backfill-timeline from WP-CLI fills in what can be derived from the dates WooCommerce does store.

A quick check before you call it done

  1. Every status your store uses is mapped, custom ones included
  2. Internal statuses are set to “not shown to customers”
  3. Handling time set, and a transit time range on every shipping method
  4. Non-working days and this year’s holidays entered
  5. A test order shows the right stage, sub-label and estimate on the account page
  6. The Progress column looks right on the order list, not just the single order

Where this pays off

A readable timeline is the single biggest lever on “where is my order” email volume — see cutting WISMO emails during the holiday rush for what that looks like in a busy season. Pair it with self-service cancellations and you have covered both halves of what customers actually want after checkout: visibility and control.

How to Customize Your WooCommerce Order Status Timeline (Step-by-Step)