Customizing the completed order email comes down to two moves: build a replacement triggered by the Order Completed event, then switch off WooCommerce’s own version so customers do not receive both. Before that, check whether you need the whole operation, because WooCommerce has an Additional content field that adds a paragraph to the existing email with no code and no plugin. If you need to change the wording, the structure, or the order of what the customer sees, the full replacement is below in four steps, sequenced so that no customer is ever left with no email at all.
Start with the cheapest option that works
Three routes, in increasing order of effort. Most people need the first or the third.
| What you want to change | Route | Needs code |
|---|---|---|
| Add a paragraph, change the subject or the heading | WooCommerce → Settings → Emails → Completed order | No |
| Change the layout, the order table, the structure | Copy the PHP template into your child theme | Yes |
| Rewrite the message, add conditions, send different versions to different customers | Disable the default and build a replacement in a plugin | No |
The built-in route is genuinely underused. Additional content takes a paragraph that appears at the bottom of the existing email, and together with the subject and heading fields it covers a surprising number of requests: a thank-you line, delivery information, a discount code for the next order. If that is all you need, stop there and skip the rest of this guide.
This guide covers the third route, because the first two cannot change the body text or decide who gets which message.
ShopMagic
ShopMagic lets you customize WooCommerce completed order email. But that's not all! Give it a try. It's free!
Download for free or Go to WordPress.orgTable of contents
- Start with the cheapest option that works
- Editing email templates in WooCommerce
- Customize the completed order email with ShopMagic
- Four steps
- Summary
- Frequently asked questions
Editing email templates in WooCommerce
The built-in way to change anything beyond the subject, heading and extra paragraph is to copy the PHP template for that email. Go to WooCommerce → Settings → Emails.
Open the email you want to change and copy its template to your theme folder.

From there you can use the on-screen editor.

Or edit the file in a proper code editor, which is the better option if you want syntax highlighting and a way back when something breaks.

Two things to know before taking this route. Copy the template into a child theme, because a copy inside a parent theme disappears with the next theme update. And the copy freezes at today’s version, so when WooCommerce changes the original your copy keeps the old markup until you merge the change by hand.
This approach needs PHP and a willingness to maintain the file. If neither applies, the plugin route below reaches the same result from the admin screen.
Customize the WooCommerce completed order email with ShopMagic
ShopMagic replaces the email rather than editing it: you build your own message, attach it to the Order Completed event, and turn WooCommerce’s version off. The same mechanism also produces emails WooCommerce does not have, such as follow-ups and newsletters. More on the wider picture in the WooCommerce emails guide.
What this gets you that the template route does not
Writing the message in an editor rather than in PHP, so a wording change takes a minute instead of a deployment. Conditions, so a first-time buyer and a returning customer can receive different messages from the same event. Control over what appears and in what order, including showing purchased products as a list instead of the default table. And a test send, so you see the real email before a customer does.
ShopMagic is free. Over 10,000 WooCommerce stores use it.

ShopMagic
ShopMagic lets you customize WooCommerce completed order email. But that's not all! Give it a try. It's free!
Download for free or Go to WordPress.orgCustomize the WooCommerce completed order email in 4 steps
Two things have to happen: a new email has to exist, and the default one has to stop. The order matters.
Build and test the replacement first, then disable the WooCommerce email. Doing it the other way round leaves a window in which completed orders send nothing at all, and that window lasts exactly as long as it takes you to get distracted.
If you already have ShopMagic installed, go to step 2.
- New Order
- Pending Order
- Processing Order
- Cancelled Order
- Completed Order (this guide)
- Failed Order
- On-Hold Order
- Refunded Order
Step 1: install and activate ShopMagic
Install the plugin from the WordPress plugins screen.
Search for “ShopMagic” under Plugins → Add New, or download it from the WordPress repository and upload it. Activate it when the installation finishes.

Step 2: create the automation and pick the event
Create a new automation and set its event to Order Completed.
Go to ShopMagic → Automations → Add New. Give it a name for your own reference, then select the Order Completed event, which fires whenever an order reaches that status.

Filters are optional and go in here too. They decide who qualifies, based on the customer or on what was in the cart, which is how one event can produce different emails for different buyers.
Leave filters empty for your first automation. An email that does not arrive because a filter excluded the test order is the most common reason people think the whole thing is broken.
Step 3: add the email and write its content
Add a Send Email action and fill in the recipient, subject and body.
In the Actions box, click + New Action and choose Send Email.

In the To field put the placeholder {{ customer.email }}, which is replaced with the real address when the email goes out. Then write the subject, for example “Your order is on its way”.
For the body, start from scratch or paste the default WooCommerce wording below and edit from there:
Placeholders are replaced with real order data at send time:
{{ customer.first_name }}customer’s first name.{{ order.details }}the order table with products, payment method and totals.{{ order.billing_formatted_address }}billing information.{{ customer.phone }}customer’s phone.{{ customer.email }}customer’s email address.
This email matters more than it looks. WP Desk telemetry from 19,803 WooCommerce stores, collected in August 2026, shows 86.2% of orders placed as guests. A guest has no account to look the order up in later, so what you write here is the only lasting record of the purchase they hold.
Step 4: test, then disable the WooCommerce email
Send yourself a test, confirm it arrives correctly, and only then switch off the default.
Use the test send to check the placeholders resolve and the formatting survives in a real inbox. When you are satisfied, go to WooCommerce → Settings → Emails and open Completed order:

Untick the enable option:

From now on only your version is sent, with no duplicates.
One thing to remember afterwards: that setting is now load-bearing. If you ever deactivate the plugin, the completed order email stops entirely rather than falling back to the WooCommerce one, so switch the default back on before removing anything.
Summary
Three routes lead to a different completed order email, and they are not equally expensive. WooCommerce’s own Additional content field, along with the subject and heading, handles adding a paragraph with no code at all, which covers more requests than people expect. Copying the PHP template into a child theme gives full control of layout, at the cost of PHP and a file you now merge by hand after WooCommerce updates. Replacing the email with an automation gives you the wording, the structure and conditional sending from the admin screen, which is what most stores actually want.
If you take the third route, the sequence is the part worth getting right: install, build the automation on the Order Completed event, write the email and test it, and only then disable the WooCommerce version. Reversed, there is a period where completed orders trigger no email whatsoever. Leave filters empty on the first attempt, since an excluded test order looks exactly like a broken setup, and remember that the disabled default is now a dependency: turning the plugin off also turns the email off.
A note on what this email is. Completed does not mean paid, it means fulfilled. Payment usually moves an order to Processing, and Completed is the status you set when the order ships or the download is ready, which is why this message reads as “your order is on its way” rather than “thank you for your payment”.
ShopMagic
ShopMagic lets you customize WooCommerce completed order email. But that's not all! Give it a try. It's free!
Download for free or Go to WordPress.org🪄 The same mechanism sends a thank-you email. This video shows it with ShopMagic:
Frequently asked questions
Can I customize the WooCommerce completed order email without a plugin?
Partly. The subject, heading and an extra paragraph are editable in WooCommerce → Settings → Emails. Changing the body text or the layout means editing the PHP template or replacing the email.
When is the completed order email sent?
When an order reaches the Completed status, which normally means fulfilled rather than paid. A successful payment usually moves an order to Processing instead.
Do I have to disable the default email?
Yes, if you build a replacement, otherwise the customer receives both. Disable it only after testing your own version.
What happens if I deactivate the plugin later?
No completed order email is sent at all, because the WooCommerce one is still switched off. Re-enable it before removing the plugin.
Why is my WooCommerce completed order email not sending?
Check three things in order: whether the email is enabled at all, whether orders actually reach the Completed status in your workflow, and whether your server is sending mail, which you can test independently of WooCommerce.
Can I send different completed order emails to different customers?
Yes, using filters on the automation. The same Order Completed event can produce one message for a first-time buyer and another for a returning one.
Can I show purchased products as a list instead of a table?
Yes. Once you write the body yourself, the order table is one placeholder among others rather than a fixed part of the template.
Will editing the PHP template survive a WooCommerce update?
The file survives if it sits in a child theme, but it stops matching the original. When WooCommerce changes that template, your copy keeps the old version until you merge the change yourself.



