WooCommerce emails include each line item in an order by default within an “order items” table. This table is automatically included in almost every WooCommerce transactional email, and displays the product quantity, price, and total.

WooCommerce Default Email Order items

Default Email Order items

However, this isn’t the only data that WooCommerce has available for the order items table in its emails. There are actually other pieces of product data that can be included, but they’re “turned off” by default. WooCommerce can include information like the SKU and product image very easily by switching the defaults for these pieces of data to “on” instead, letting you add more information to WooCommerce emails.

If you’re using WooCommerce 2.5 or newer, please view this updated tutorial instead.

Add Product Images to WooCommerce Emails

WooCommerce includes the ability to add your product images to the order items within your shop’s transactional emails, and turning them on is possible via filter.

We’ll need to use the woocommerce_email_order_items_table filter to change which data is included in the order items table. This filter lets us change the default values for the items in the “Email Order Items” template so that we can make changes like turning SKUs on or turning on product images.

This filter passes in all of the default values for the email order items table. SKUs, purchase notes, images, and download links are all set to false (“off”) by default. WooCommerce conditionally handles turning some of these on itself, such as download links when downloadable access should be granted, but SKUs and images will need to be turned on manually.

Let’s first enable product images within our email order items template. We can do so my taking the data passed into this filter and returning it, but changing the show_image value to true instead with this snippet (in a custom plugin or functions.php):

When this code is used, a 32px by 32px product image is automatically inserted in the order items table with WooCommerce emails:

WooCommerce Order Email with Product Images

Images added to email

This snippet could also be edited to change the image size. Rather than including $image_size for this value, we can pass in an array of sizes. The first number in the array will be the width, then the second number is the image height (it’s best if you keep the aspect ratio for your product thumbnails, which is probably 1:1).

Let’s change the image size to 150px by 150px instead of the default 32px by 32px. Change:

'image_size' => $image_size

to

'image_size' => array( 150, 150 )

This will give us larger images in the order items table within emails:

WooCommerce Large Product Images in Order Emails

Large images included

This can let you show a picture to customers side by side with the product name in emails to confirm the purchase.

Add Product SKUs to WooCommerce Emails

Product SKUs can also be turned on easily within emails using the same snippet. If you enable SKUs within the email order items table, they will display as #sku (the hash before the SKU will always be shown).

To enable SKUs, you’d change:

'show_sku' => $show_sku,

to

'show_sku' => true,

When SKUs are enabled, they’re added right after the product name.

WooCommerce show SKUs in order emails 1

Show SKUs in emails

Notice that I’ve kept images enabled here, but you don’t have to do so — leave the snippet as

'show_image' => $show_image,

instead of

'show_image' => true,

if you don’t want to show images.

As a final note on adding SKUs to emails, I dislike that they’re shown inline with the product name. We can use the woocommerce_order_item_name to adjust the product name and add a line break after it easily:

function sww_edit_order_item_name( $name ) {
    return $name . '<br />';
}
add_filter( 'woocommerce_order_item_name', 'sww_edit_order_item_name' );
WooCommerce Show SKUs in emails 2

Show SKUs with line break

Adding Information to WooCommerce Emails

While adding other information to your WooCommerce emails is possible, it requires more advanced customization to do so. These pieces of data are already included in the emails, and are simply turned off by default. Our code snippets turn them on for email order items tables.

You can also change the way emails look without changing any of the code around emails by following our tutorial or using the WooCommerce Email Customizer plugin.

I wouldn’t recommend changing the 'show_download_links' default, as WooCommerce handles this for you based on your settings (and only includes them with processing and / or completed order emails). However, you could also include purchase notes if desired.


Note: This post may contain affiliate links, which means we get a commission from the plugin, theme, or service provider if you choose to purchase. Regardless of this, we are committed to providing high quality, unbiased resources. Have more questions? See our affiliate policy. You can use the plain links below if you prefer that we not receive a referral commission:
Articles you may also like:

Posted by Beka Rice

Beka Rice manages the direction of Sell with WP content and writes or edits most of our articles to share her interests in eCommerce. Or she just writes as an excuse to spend more time jamming out to anything from The Clash to Lady Gaga. Who knows.

20 Comments

  1. Thank you very much Beka – you’ve just saved me a ton of time! It’s highly appreciated!

  2. Hi,

    Is it possible show total how many quantity in email?

  3. Hi,
    Great article, I want to ask if you have any suggestion on how can I include different info in email-order-items.php depending if the recipient is a customer o admin?
    Since email-order-items.php is common to both email notifications templates (customer and admin), the modifications in email-order-items.php will be visible by both users, and there’s some info relevant to admins, and that same info shouldn’t be seen for the customers.

    Thanks

  4. Hi

    I have followed the instructions above and it does get the image to show in the email, but all of the information such as image/product title/sku/product attributes are all crammed together in one TD in my table.

    How can I get it so the image is on top with the text underneath to make it look neater? Or but the image in a TD or its own?

    1. Putting the image in its own td is possible, but you’d need to override the email-order-items template to do so. This tutorial can help with that.

  5. Hi..Beka Rice.. Its a great tutorial.. I want to delete the entire Quantity field in my email (ie quantity and its value) .. How can i remove that

    pls help me out

  6. Hi Bekka,

    With Woocommerce 2.5.2 the SKU shows in the admin new customer order email but not in the email that goes to the customer.

    What do I need to change so that the SKUs are shown in the customer email?
    Also, the SKUs do not show in the customer’s account order details on the site. What do I need to change so that the SKUs are displayed?

    Many thanks

  7. Thanks alot 🙂

  8. Oh, it was so easy. I don’t know what I was worried about. I re-read your article and saw that I just needed to add the code to the functions.php file (yes, I am using a child theme) and it worked.

    So now I have a question. I read elsewhere about the way to change things is by copying a ‘woocommerce’ directory to the child theme and nesting down until I get to the file that needs to be changed. I thought that file was the email template email-order-details.php

    Your method seems so much easier.

    Is there an advantage to either way?

    1. If you can avoid overriding templates and changing via hooks instead, that’s usually preferable because the changes are upgrade-safe. If you override templates, you should check for changes with each major WooCommerce version in case you need to adjust your overrides / add new hooks / etc.

  9. Thank for the article Beka. Regarding your note re: downloadable links, do you know where in the Woocommerce code that it writes out the “Download:” label just before it displays the downloadable link for a virtual/downloadable product, in completed orders?

    I want to flip this around to say “Upload:” instead, but am struggling to track down how Woocommerce writes this label out to the email. Thanks and regards, Alistair

    1. Yep, the order abstract generates that, and the wording is translatable, so you could use the Say what plugin to translate both Download %d and Download to your desired text.

      1. Great, thanks Beka. It’s the $prefix output in that function that I want to change. I’ve made a few other tweaks via a mini plugin I wrote myself, so I’ll just need to get my head around best to intercept that one.

        cheers,

        Alistair

  10. I get the following “undefined variable” errors on: plain_text, show_download_links, show_purchase_note, show_image, image_size. I only want to show the SKU.

  11. Thanks for this Beka!

    Can we selectively hide ‘Customer details’ and ‘Billing Address’ from all Woocommerce emails except the ones to admin? I just want to show Shipping Address to Customers and Vendors.

  12. Hi Beka, thanks a lot for this helpful article (and all the other ones ;-)). I just run into one issue. We’re selling downloadable products and when I add the code to functions.php to show the images in the mails, the downloads links disappear. Do I have to change something within the code?

    Cheers
    Maike

    1. Hmm looks like they changed the filter in WooCommerce 2.5, I’ll have ot pencil in an update. In the meantime, instead of 'show_download_links' => $show_download_links, try making it match what the new code has and see if that helps. (Replace $this with $order)

  13. Hey y’all, I’ve added an update post here that will work for WooCommerce 2.5+

  14. Mant thanks! really helpful !

  15. Hello,
    SKU is showing now but i want to display attribute like color in order email template.
    Could anyone help me please.

It's been over 2 years since this post was published, so comments have been closed. Thanks for reading!