Send custom WooCommerce emails

Custom WooCommerce emails sends an additional notification for selected order, account or booking events. Use it when a standard WooCommerce message needs a separate companion message with its own content, recipients, category rules or attachments. Standard WooCommerce notifications remain independent.

You need WooCommerce and permission to manage POM Tweaks settings. Booking confirmation also requires WooCommerce Bookings and a booking linked to an order.

Configure a notification

  1. Open Settings → POM Tweaks → E-Commerce → Emails.
  2. Enable Custom WooCommerce emails and save if the configuration is not yet visible.
  3. Under Custom notifications, select Add new and choose When to send. Use one row per event: if several rows use the same event, only the first applies, even when disabled.
  4. Enter an Internal label and select Enable this notification.
  5. For new, cancelled or failed orders, enter Recipients for administrator events as comma-separated email addresses. Empty uses the site administrator address. All other events use the order's billing email or the account's email address.
  6. Enter Subject, Email heading and Email body. The body accepts safe HTML and the merge tags below, inside WooCommerce's standard email header and footer. An empty subject uses an event default; an empty heading stays empty.
  7. Optionally choose Product categories. At least one order item must belong to a selected category. Empty permits every order; category rules do not apply to account creation or password resets.
  8. Use Choose attachments to select Media Library files, including PDFs. You can also edit the comma-separated IDs in Attachments. Only readable local files in the site's uploads directory are attached. Missing or remotely offloaded files are skipped.
  9. Choose Email format: HTML, Plain text, or HTML and plain text. Plain text is derived from the body and preserves link destinations.
  10. Select Save and verify the relevant event using a staging customer and order.

The entries in WooCommerce → Settings → Emails retain their custom email identity and link back to POM Tweaks for configuration. Edit these notifications in POM Tweaks.

Supported events

Event Trigger
New order Pending, failed or cancelled orders become processing, completed or on-hold.
Cancelled order Processing, on-hold or pending orders become cancelled.
Failed order Pending or on-hold orders become failed.
Order on-hold Pending, failed or cancelled orders become on-hold.
Processing order Pending, on-hold, failed or cancelled orders become processing.
Completed order An order becomes completed.
Refunded order A full or partial refund notification is raised.
Customer invoice / Order details WooCommerce successfully hands its native invoice/order-details message to the mail transport, including manual resends. This does not run on refund events.
Customer note A note addressed to the customer is added to an order.
Reset password WooCommerce raises a password-reset notification with its existing reset key.
New account WooCommerce raises its customer-created notification.
Booking confirmed WooCommerce Bookings raises a confirmation notification for a booking with an order.

These are event notifications, not a schedule or a history of messages already delivered. Deliberately repeating an event can send another message. Transport success does not guarantee inbox delivery.

Existing merge tags

All original merge tags remain supported. Use tags literally, including the double braces. Order tags are empty when an account event has no order. Product tags belong inside an item block.

Tag Value
{{blogname}} Site name.
{{order_number}} Displayed order number, including custom numbering.
{{order_date}} Order creation date in the store's date format.
{{customer_details}} WooCommerce's customer and address details for this email.
{{order_meta}} Details supplied by WooCommerce's email order-meta hook.
{{order_meta_field="key"}} The specified order metadata value; supports HPOS.
{{order_product}}…{{/order_product}} Repeat the enclosed markup once for each order product line. Multiple independent blocks are supported.
{{product_name}} Current product title, falling back to the saved order-line name if the product was deleted.
{{product_price}} Current product price, as in the original feature; deleted products fall back to the saved line total divided by quantity. Use {{line_total}} for the actual order-line total.
{{product_description}} Current product description as safe HTML.
{{product_stock}} Current stock quantity, or empty when not available.
{{product_sku}} Current product or variation SKU.
{{product_quantity}} Quantity saved in the order line.
{{product_meta_field="key"}} Parent-product metadata, including when the purchased item is a variation.
{{order_item_meta_field="key"}} Metadata saved on this specific order line.

Scalar metadata is inserted as escaped text; structured metadata is represented as JSON. Use double or single quotes around metadata keys. Repeated occurrences of the same tag receive the same value within that item. Unknown tags remain unchanged so they are visible during review.

<p>Thank you for order {{order_number}}.</p>
{{order_product}}
<p>{{product_name}} × {{product_quantity}} — {{line_total}}</p>
{{/order_product}}
{{customer_details}}

Additional merge tags

Tags Context
{{order_id}}, {{order_total}}, {{order_currency}} Internal order ID, unformatted order total and currency code.
{{customer_name}}, {{customer_email}} Order billing details or account details.
{{customer_note}} Note supplied with a customer-note notification.
{{refund_amount}} Amount of the refund that triggered the notification.
{{booking_id}} Booking confirmation reference.
{{user_login}} Username for account notifications.
{{account_url}} My Account page URL.
{{reset_password_url}} Recovery URL using the key supplied by WooCommerce, available only during password-reset notifications.
{{product_id}}, {{product_url}}, {{line_total}} Inside an item block: product/variation ID, current product URL and saved line total after discounts, excluding tax.

Subjects and headings support textual merge tags. Keep item loops and formatted customer details in the email body. For a password-reset message, include a link such as <a href="{{reset_password_url}}">Choose a new password</a>. New-account emails can use {{account_url}}; they do not create a second password-reset key or invalidate WooCommerce's welcome link.

Verify and troubleshoot

  • Check the recipient, subject, heading, all item blocks, attachments and links for each enabled event. Include an order with multiple products and a second order to verify their content independently.
  • Verify the event itself. A completed-order email is not triggered by resending an invoice, and an invoice companion requires the native invoice transport to report success.
  • If no additional message appears, check both enable switches, the first row for that event, category matches and the customer email. Account events do not accept administrator recipient overrides.
  • If a merge tag stays visible, check its spelling and context. The WooCommerce design preview uses sample data; account, note, refund and booking values require their actual event to verify fully.
  • If an attachment is missing, confirm its Media Library ID and that its file is available locally. Selecting a media URL or a file outside uploads does not attach it.
  • Check your site's mail delivery provider if messages are generated but do not arrive. This feature uses WooCommerce's mail transport and does not configure SMTP.

Disable a row to stop that event, or disable Custom WooCommerce emails to stop all its additional notifications. Existing orders and standard WooCommerce notifications remain available.