{"id":885,"date":"2026-05-24T06:52:34","date_gmt":"2026-05-24T06:52:34","guid":{"rendered":"https:\/\/quickshipd.com\/blog\/?p=885"},"modified":"2026-08-19T16:57:12","modified_gmt":"2026-08-19T16:57:12","slug":"delivery-dates-order-confirmation-emails-woocommerce","status":"publish","type":"post","link":"https:\/\/quickshipd.com\/blog\/delivery-dates-order-confirmation-emails-woocommerce\/","title":{"rendered":"How to Add Delivery Dates to WooCommerce Order &#038; Shipping Confirmation Emails"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">You&#8217;ve shown the delivery estimate on the product page, the cart, and the checkout. The customer placed their order. Now they&#8217;re waiting \u2014 and the next question they&#8217;ll have is the same one they had before the purchase: \u201cWhen is this arriving?\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adding the delivery estimate to your confirmation emails closes the loop. The customer has a written reference point they can refer back to \u2014 and you get fewer \u201cwhere is my order?\u201d support tickets as a result. This covers which email should carry it, three ways to add it, and a snippet you can paste.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Which WooCommerce Email Should Carry the Delivery Date?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WooCommerce sends several transactional emails and they are not interchangeable. Putting the estimate in the wrong one is why some stores add it and still get the support ticket.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>WooCommerce email<\/th><th>Fires when<\/th><th>Commonly called<\/th><th>Delivery date belongs here?<\/th><\/tr><\/thead><tbody><tr><td><strong>Processing order<\/strong><\/td><td>Payment received<\/td><td>Order confirmation<\/td><td><strong>Yes<\/strong> \u2014 the primary place<\/td><\/tr><tr><td><strong>Completed order<\/strong><\/td><td>You mark the order complete<\/td><td>Shipping confirmation<\/td><td><strong>Yes<\/strong> \u2014 restate it with tracking<\/td><\/tr><tr><td><strong>On-hold order<\/strong><\/td><td>Awaiting payment<\/td><td>Pending<\/td><td>No \u2014 no dispatch date exists yet<\/td><\/tr><tr><td><strong>New order<\/strong><\/td><td>Payment received<\/td><td>Admin notification<\/td><td>No \u2014 goes to you, not the customer<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The wrinkle worth knowing: WooCommerce has no email literally named \u201cshipping confirmation.\u201d Most stores use <strong>Completed order<\/strong> for that purpose, because marking an order complete is what most fulfilment workflows do at dispatch. So if you want a shipping confirmation email, that is the template to edit.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>\ud83c\udfaf NOTE<\/strong> \u201cCompleted\u201d in WooCommerce means <em>you have finished your part<\/em>, not that the parcel has arrived. Customers read it as \u201cdelivered\u201d surprisingly often. Renaming the email subject to something like \u201cYour order has shipped\u201d removes that ambiguity in about ten seconds.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Why Confirmation Emails Matter for Delivery Expectations<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The order confirmation email is the first communication a customer receives after purchasing. It&#8217;s also one of the most-opened emails in eCommerce \u2014 open rates typically far exceed marketing emails, because the customer is actively looking for confirmation their order went through.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That moment of attention is the ideal time to reinforce the delivery window. A customer who sees their <a href=\"https:\/\/quickshipd.com\/estimated-delivery-date\/\">estimated delivery date<\/a> in the confirmation email will refer back to that email rather than contacting support when they&#8217;re wondering where their order is.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to Add Delivery Dates to WooCommerce Emails<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WooCommerce order confirmation emails are customisable through three routes, in increasing order of control:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>WooCommerce email settings: <\/strong>under WooCommerce \u2192 Settings \u2192 Emails you can edit each template&#8217;s subject, heading and \u201cadditional content\u201d field. The additional content field is the quickest place to put a static delivery statement \u2014 no code, no plugin. It cannot output a calculated per-order date.<\/li>\n\n\n\n<li><strong>Email customisation plugins: <\/strong>Kadence WooCommerce Email Designer or a similar visual editor gives you drag-and-drop blocks and merge tags for order-specific information. Right choice if you want branded emails generally and the delivery date is one of several changes.<\/li>\n\n\n\n<li><strong>A hook or template override: <\/strong>the most control, and the only route that outputs a genuinely calculated date. You can hook into the email body without touching template files at all \u2014 see below.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Adding a Delivery Estimate to the Email in Code<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Add this to your <strong>child theme&#8217;s<\/strong> <code>functions.php<\/code> or a code snippets plugin \u2014 never the parent theme, since a theme update will wipe it. It prints a delivery window underneath the order details table in the customer&#8217;s processing and completed emails.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n\/**\n * Print a delivery window in the customer's order confirmation\n * and shipping confirmation emails.\n *\/\nadd_action( 'woocommerce_email_order_details', 'qsd_email_delivery_note', 15, 4 );\n\nfunction qsd_email_delivery_note( $order, $sent_to_admin, $plain_text, $email ) {\n\n    \/\/ Customer-facing emails only.\n    if ( $sent_to_admin ) {\n        return;\n    }\n\n    $allowed = array( 'customer_processing_order', 'customer_completed_order' );\n    if ( ! isset( $email-&gt;id ) || ! in_array( $email-&gt;id, $allowed, true ) ) {\n        return;\n    }\n\n    \/\/ Business days to add. Replace with your own values.\n    $min_days = 3;\n    $max_days = 5;\n\n    $from = qsd_add_business_days( $order-&gt;get_date_created(), $min_days );\n    $to   = qsd_add_business_days( $order-&gt;get_date_created(), $max_days );\n\n    $text = sprintf(\n        'Estimated delivery: %s \u2013 %s',\n        $from-&gt;format( 'D, j M' ),\n        $to-&gt;format( 'D, j M' )\n    );\n\n    if ( $plain_text ) {\n        echo esc_html( $text ) . PHP_EOL;\n        return;\n    }\n\n    echo '&lt;p style=\"font-size:15px;margin:16px 0;\"&gt;&lt;strong&gt;'\n        . esc_html( $text ) . '&lt;\/strong&gt;&lt;\/p&gt;';\n}\n\n\/**\n * Add business days, skipping Saturdays and Sundays.\n *\/\nfunction qsd_add_business_days( $date, $days ) {\n    $d = clone $date;\n    while ( $days &gt; 0 ) {\n        $d-&gt;modify( '+1 day' );\n        if ( (int) $d-&gt;format( 'N' ) &lt; 6 ) {\n            $days--;\n        }\n    }\n    return $d;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Three things worth understanding about it:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The <code>$plain_text<\/code> branch is not optional.<\/strong> WooCommerce sends a plain-text alternative alongside the HTML version. Skip that check and your markup appears as raw tags in any client rendering the text part.<\/li>\n\n\n\n<li><strong>Inline the CSS.<\/strong> Email clients strip stylesheets, so styling has to sit in the <code>style<\/code> attribute.<\/li>\n\n\n\n<li><strong>It counts from the order date, not from dispatch.<\/strong> If you have a processing time or a daily cutoff, add those days to <code>$min_days<\/code> and <code>$max_days<\/code> or the email will promise a date earlier than you can hit. That distinction is covered in <a href=\"https:\/\/quickshipd.com\/blog\/delivery-date-vs-shipping-date-vs-dispatch-date\/\">dispatch date vs. delivery date<\/a>.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A delivery date plugin does the same job without the maintenance, and keeps the email in step with what the product page showed \u2014 which is the part hand-rolled code tends to drift away from.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-background wp-element-button\" href=\"https:\/\/wordpress.org\/plugins\/quickshipd\/\" style=\"background-color:#16a34a\" target=\"_blank\" rel=\"noopener\">Get QuickShipD Now!<\/a><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">The Simpler Approach: A Clear Estimated Delivery Note<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If adding dynamic, automatically calculated dates to emails is more complexity than you want right now, the simpler approach is a static statement in the template&#8217;s additional content field. Something like: \u201cYour order will be dispatched within 1\u20132 business days and typically arrives within 5\u20137 business days of dispatch.\u201d<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This isn&#8217;t as specific as a calculated date, but it&#8217;s honest and useful. Combined with delivery estimates shown pre-purchase, it reinforces the expectation the customer already has \u2014 and it takes a minute rather than an afternoon.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>\ud83d\udca1 PRO TIP<\/strong> Whatever you put in your confirmation email, make sure it aligns with what was shown at checkout. If the product page said \u201cGet it by Thursday\u201d and the confirmation email says \u201cAllow 7\u201310 business days\u201d, the customer will be confused and potentially frustrated \u2014 even if both statements are technically accurate.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What the Shipping Confirmation Email Should Say<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The dispatch message is a different job from the order confirmation. By the time it sends, the estimate is no longer a forecast from the order date \u2014 the parcel is genuinely in transit and the window should be tighter.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Say it has shipped, not that it is \u201ccomplete\u201d.<\/strong> Edit the subject line.<\/li>\n\n<li><strong>Restate the arrival window,<\/strong> now counted from dispatch rather than from the order.<\/li>\n\n<li><strong>Include the tracking number and carrier,<\/strong> and say which carrier it is \u2014 tracking numbers alone are useless to most people.<\/li>\n\n<li><strong>Say what to do if it is late,<\/strong> with a date. \u201cIf it has not arrived by Tuesday 19th, reply to this email\u201d beats a generic support link.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The goal is continuity: the customer sees the same delivery expectation at every touchpoint, from the product page to the confirmation email to the dispatch notice. That consistency is what builds genuine confidence in your store&#8217;s reliability.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently asked questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">What is the difference between an order confirmation and a shipping confirmation email?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The order confirmation goes out when payment succeeds and tells the customer you have their order \u2014 in WooCommerce that is the Processing order email. The shipping confirmation goes out when the parcel leaves you and carries tracking; most WooCommerce stores use the Completed order email for it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Does WooCommerce show a delivery date in emails by default?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. WooCommerce emails contain order details, totals and addresses, but no delivery estimate of any kind. Adding one requires the additional content field, an email customiser plugin, a snippet, or a delivery date plugin.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How do I edit WooCommerce order confirmation emails without code?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Go to WooCommerce \u2192 Settings \u2192 Emails and open the template you want. You can change the subject, the heading and the additional content shown at the bottom. For layout and branding changes beyond that you need an email designer plugin or a template override.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Which email should the delivery date go in if I only pick one?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The order confirmation \u2014 WooCommerce&#8217;s Processing order email. It has the highest open rate of anything you send and it reaches the customer while the question is live. Adding it to the dispatch email as well is better, but this one first.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How do I test a WooCommerce email after changing it?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Place a real test order on a staging site rather than relying on a preview, because previews often use placeholder order data and will not reveal a broken calculation. Check both the HTML and plain-text versions, since they render through different code paths.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Related Reading<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/quickshipd.com\/blog\/reduce-wismo-support-tickets-woocommerce\/\">How to Reduce \u201cWhere Is My Order\u201d Support Tickets<\/a><\/li>\n<li><a href=\"https:\/\/quickshipd.com\/blog\/delivery-date-vs-shipping-date-vs-dispatch-date\/\">Delivery Date vs. Shipping Date vs. Dispatch Date: What&#x27;s the Difference?<\/a><\/li>\n<li><a href=\"https:\/\/quickshipd.com\/blog\/plugins-estimated-delivery-dates-woocommerce\/\">WooCommerce Delivery Date Plugin Types Explained<\/a><\/li>\n<li><a href=\"https:\/\/quickshipd.com\/blog\/amazon-style-delivery-dates-in-woocommerce\/\">How to Add Amazon-Style Delivery Dates to WooCommerce (Step-by-Step)<\/a><\/li>\n<li><a href=\"https:\/\/quickshipd.com\/blog\/cant-meet-estimated-delivery-dates-woocommerce\/\">What Should I Do If I Can&#x27;t Meet Estimated Delivery Dates?<\/a><\/li>\n<\/ul>\n\n\n\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@graph\": [\n    {\n      \"@type\": \"BreadcrumbList\",\n      \"itemListElement\": [\n        {\n          \"@type\": \"ListItem\",\n          \"position\": 1,\n          \"name\": \"Home\",\n          \"item\": \"https:\/\/quickshipd.com\/\"\n        },\n        {\n          \"@type\": \"ListItem\",\n          \"position\": 2,\n          \"name\": \"Blog\",\n          \"item\": \"https:\/\/quickshipd.com\/blog\/\"\n        },\n        {\n          \"@type\": \"ListItem\",\n          \"position\": 3,\n          \"name\": \"How to Add Delivery Dates to WooCommerce Order & Shipping Confirmation Emails\",\n          \"item\": \"https:\/\/quickshipd.com\/blog\/delivery-dates-order-confirmation-emails-woocommerce\/\"\n        }\n      ]\n    },\n    {\n      \"@type\": \"FAQPage\",\n      \"mainEntity\": [\n        {\n          \"@type\": \"Question\",\n          \"name\": \"What is the difference between an order confirmation and a shipping confirmation email?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"The order confirmation goes out when payment succeeds and tells the customer you have their order. In WooCommerce that is the Processing order email. The shipping confirmation goes out when the parcel leaves you and carries tracking; most WooCommerce stores use the Completed order email for it.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Does WooCommerce show a delivery date in emails by default?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"No. WooCommerce emails contain order details, totals and addresses, but no delivery estimate of any kind. Adding one requires the additional content field, an email customiser plugin, a snippet, or a delivery date plugin.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"How do I edit WooCommerce order confirmation emails without code?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Go to WooCommerce then Settings then Emails and open the template you want. You can change the subject, the heading and the additional content shown at the bottom. For layout and branding changes beyond that you need an email designer plugin or a template override.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"Which email should the delivery date go in if I only pick one?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"The order confirmation, which is WooCommerce's Processing order email. It has the highest open rate of anything you send and it reaches the customer while the question is live. Adding it to the dispatch email as well is better, but this one first.\"\n          }\n        },\n        {\n          \"@type\": \"Question\",\n          \"name\": \"How do I test a WooCommerce email after changing it?\",\n          \"acceptedAnswer\": {\n            \"@type\": \"Answer\",\n            \"text\": \"Place a real test order on a staging site rather than relying on a preview, because previews often use placeholder order data and will not reveal a broken calculation. Check both the HTML and plain-text versions, since they render through different code paths.\"\n          }\n        }\n      ]\n    }\n  ]\n}\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>WooCommerce order and shipping confirmation emails are the most-opened messages you send. Here is which email should carry the delivery date, three ways to add it, and a copy-paste snippet.<\/p>\n","protected":false},"author":1,"featured_media":980,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[],"class_list":["post-885","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guides"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/quickshipd.com\/blog\/wp-json\/wp\/v2\/posts\/885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/quickshipd.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/quickshipd.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/quickshipd.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/quickshipd.com\/blog\/wp-json\/wp\/v2\/comments?post=885"}],"version-history":[{"count":5,"href":"https:\/\/quickshipd.com\/blog\/wp-json\/wp\/v2\/posts\/885\/revisions"}],"predecessor-version":[{"id":1193,"href":"https:\/\/quickshipd.com\/blog\/wp-json\/wp\/v2\/posts\/885\/revisions\/1193"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/quickshipd.com\/blog\/wp-json\/wp\/v2\/media\/980"}],"wp:attachment":[{"href":"https:\/\/quickshipd.com\/blog\/wp-json\/wp\/v2\/media?parent=885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/quickshipd.com\/blog\/wp-json\/wp\/v2\/categories?post=885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/quickshipd.com\/blog\/wp-json\/wp\/v2\/tags?post=885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}