The free plugin doesn’t send delivery emails — it records everything on the order and shows it on the timeline. Delivery Manager Pro adds six WooCommerce emails and an outgoing webhook system, configured at WooCommerce → Delivery Manager → Notifications.
The emails
They are real WC_Email classes, so they appear under WooCommerce → Settings → Emails alongside your other WooCommerce emails and are enabled, worded, styled and overridden exactly the same way.
| Sent to | When | |
|---|---|---|
| Delivery assigned | The delivery person | An order is assigned or reassigned to them — with the address, phone, map link and items. |
| Out for delivery | The customer | The delivery status becomes Out for Delivery. |
| Delivered | The customer | The order is marked delivered — including the proof-of-delivery summary if it’s public. |
| Delivery failed | The customer | A delivery attempt fails. |
| Delivery status update | The customer | Any status with Email customer enabled that has no dedicated email of its own — e.g. Picked Up, Rescheduled, Returned. |
| Delivery alert (admin) | The store admin | Any status with Email admin enabled — failed attempts and returns by default. |
Which statuses trigger which email is decided on the Statuses tab, via each status’s Email customer and Email admin checkboxes. The Notifications tab lists the emails with a Manage button that jumps straight to each one’s WooCommerce settings.
Placeholders
Available in every Pro email’s subject, heading, intro and additional content:
| Placeholder | Resolves to |
|---|---|
{order_number} | The order number |
{customer_name} | The delivery contact name |
{delivery_address} | The one-line delivery address |
{delivery_person} | The assigned driver’s display name |
{delivery_person_phone} | The driver’s phone number |
{expected_date} | The expected delivery date, with the slot |
{time_slot} | The delivery time slot |
{tracking_url} | The public tracking link (tokenised) |
{status} | The delivery status label |
{note} | The note attached to the status change |
{site_title} | Your site title |
The full list is also printed in a Placeholders panel on the Notifications tab.
The delivery block in standard WooCommerce emails
WooCommerce emails → Add a “Delivery” block (status, expected date, tracking link) to the standard customer order emails is on by default. It appends the delivery status, the expected date and the tracking link to WooCommerce’s own order emails, so even customers who never open a Pro email get the delivery information.
Email templates
Both templates are overridable from your theme:
| Template | Copy to |
|---|---|
templates/emails/delivery-notification.php | yourtheme/woocommerce/emails/delivery-notification.php |
templates/emails/plain/delivery-notification.php | yourtheme/woocommerce/emails/plain/delivery-notification.php |
SMS and push
Every notification also fires the dmanp_notification action with the email ID, order, recipient and context — the hook point for an SMS or push integration. Built-in Twilio support is on the roadmap.
Webhooks
Push delivery events to Zapier, Make, n8n or your own service.
| Setting | Notes |
|---|---|
| Endpoint URLs | One URL per line. Every enabled event is POSTed as JSON to each URL. |
| Signing secret | Optional. Requests then carry an X-DMANP-Signature header: sha256= plus the HMAC-SHA256 of the raw body. |
| Events | assigned, status_changed, delivered, failed, note_added — all enabled by default. |
A Send test webhook button fires a sample payload, and Recent webhook deliveries lists the last 50 attempts with the time, event, order, URL, attempt number and result.
Delivery and retries
Each request is attempted up to 3 times, with a growing backoff between attempts, and every attempt is logged. Leave the URL field empty to switch webhooks off entirely.
Headers
| Header | Value |
|---|---|
X-DMANP-Event | The event name |
X-DMANP-Source | Your site’s home URL |
X-DMANP-Signature | sha256=<hmac> — only when a signing secret is set |
Payload shape
{
"event": "delivered",
"timestamp": "2026-09-19T14:05:11+00:00",
"site": "https://example.com",
"order": {
"id": 1234,
"number": "1234",
"status": "completed",
"total": "42.00",
"currency": "USD",
"customer": { "name": "…", "email": "…", "phone": "…" },
"address": "…"
},
"delivery": {
"status": "delivered",
"status_label": "Delivered",
"person": { "id": 7, "name": "…", "email": "…", "phone": "…" },
"expected_date": "2026-09-19",
"time_slot": "12:00 - 15:00",
"tracking_url": "https://example.com/track/?…",
"attempts": 0
}
}
delivery.person is null when no driver is assigned. Extend the payload with the dmanp_webhook_payload filter and the event list with dmanp_webhook_events.