What the free plugin tracks
The free plugin models a delivery with two flags: Out for Delivery and Delivered. Combined with the WooCommerce order status, that’s enough for a simple run — the customer timeline shows Order Placed, order-status changes, Delivery Person Assigned, Out for Delivery and Delivered.
Two settings connect those flags to WooCommerce order statuses:
- Auto Complete Delivery — completing the order also marks it delivered.
- Complete Order on Delivery — the driver marking it delivered also completes the order.
If that’s your whole workflow, you don’t need Pro for this. If you need “picked up”, “failed attempt”, “rescheduled” or “returned to store” — read on.
Pro’s status system
Delivery Manager Pro replaces the two checkboxes with a configurable status registry at WooCommerce → Delivery Manager → Statuses.
The eight defaults
Seeded on activation, and all editable:
| Status | Icon | Counts as | Timeline step | Notifies |
|---|---|---|---|---|
| Assigned | 👤 | pending | yes | — |
| Picked Up | 📦 | active | yes | — |
| Out for Delivery | 🛵 | active | yes | customer |
| Delivered | ✅ | delivered | yes | customer |
| Failed Attempt | ⚠️ | failed | no | customer + admin |
| Rescheduled | 📅 | pending | no | customer |
| Returned to Store | ↩️ | returned | no | customer + admin |
| Delivery Cancelled | ⛔ | cancelled | no | — |
What each status holds
| Setting | What it controls |
|---|---|
| Label & description | The label used everywhere, plus a customer-facing description shown on the timeline and tracking page. |
| Icon | An emoji (or any short string) shown on badges and the timeline. |
| Colour | The badge and timeline colour. |
| Counts as | The group the status belongs to: pending, active, delivered, failed, returned or cancelled. This drives the driver’s tabs, capacity counting, the dispatch board and the reports — so a custom status behaves correctly everywhere. |
| Timeline step | Whether the status is part of the customer’s progress path. Turn it off for exceptions (failed, rescheduled…) so they appear only when they actually happen. |
| Email customer / Email admin | Whether reaching this status sends a notification. See Notifications. |
| Set order status | Optionally move the WooCommerce order to a given status when this delivery status is reached — e.g. Delivered → Completed. This generalises the free “Complete Order on Delivery” option. |
Drag rows to reorder them; the order is the customer’s progress path. Use + Add status for your own (for example, At the depot or Awaiting pickup), and Delete for ones you don’t use — except assigned, out_for_delivery and delivered, which are protected because the free plugin’s compatibility layer depends on them.
Changing status
| Who | Where |
|---|---|
| Admin/shop manager | The Delivery status dropdown in the order metabox (with an optional status note), or the orders-list column. |
| Delivery person | The status dialog on their My Account delivery view. They can pick any status except Assigned and cancellations. |
| Automatically | A status whose Set order status is configured, the Auto Complete Delivery setting when an order is completed, and the delivery-cancelled sync when an order is cancelled. |
| Programmatically | dmanp_set_status( $order, 'out_for_delivery', $args ) — see the Developer Reference. |
Every change is written to the delivery log with the actor, the timestamp, the note and (if enabled) the location — and fires the dmanp_status_changed action so add-ons can react.
The failed-attempt flow
Marking a delivery Failed Attempt:
- increments the order’s attempt counter, shown in the metabox;
- requires a note from the driver if Require a note for failed/returned deliveries is on (it is by default);
- emails the customer with the Delivery failed email and the store with the admin alert;
- leaves the order assigned, so the driver can retry or you can mark it Rescheduled.
Backwards compatibility
Pro keeps the free plugin’s _dman_is_out_for_delivery and _dman_is_delivered order meta in sync with its own status at all times. That means:
- Free templates, the free deliveries query, and any third-party code reading those flags keep working while Pro is active;
- Orders that pre-date Pro have no Pro status of their own, so their status is derived from the free flags, and they render correctly in the Pro timeline and reports;
- Deactivating Pro leaves every order in a correct free-plugin state.