The following code snippets enable you to send a email to the customer when an order or cancelled or refunded.
When you need to send a customer email for a refund, use this code.
add_action('woocommerce_order_refunded', function ($order_id, $refund_id) {
    $order = wc_get_order($order_id);
    if (!$order) {
        return;
    }
    $to = $order->get_billing_email();
    if (empty($to)) {
        return;
    }
    $subject = 'Your order has been refunded';
    $headers = ['Content-Type: text/html; charset=UTF-8'];
    $message  = '<p>Dear ' . esc_html($order->get_billing_first_name()) . ',</p>';
    $message .= '<p>Your order #' . esc_html($order->get_order_number()) . ' has been refunded.</p>';
    $message .= '<p>If you have any questions, feel free to contact us.</p>';
    $message .= '<p>Thank you,<br>' . get_bloginfo('name') . '</p>';
    wp_mail($to, $subject, $message, $headers);
}, 10, 2);
Use the following code to send a customer email when the order is manually cancelled.
add_action('woocommerce_order_status_cancelled', function ($order_id) {
    $order = wc_get_order($order_id);
    if (!$order) {
        return;
    }
    $to = $order->get_billing_email();
    if (empty($to)) {
        return;
    }
    $subject = 'Your order has been cancelled';
    $headers = ['Content-Type: text/html; charset=UTF-8'];
    $message  = '<p>Dear ' . esc_html($order->get_billing_first_name()) . ',</p>';
    $message .= '<p>Your order #' . esc_html($order->get_order_number()) . ' has been cancelled.</p>';
    $message .= '<p>If you have any questions, feel free to contact us.</p>';
    $message .= '<p>Thank you,<br>' . get_bloginfo('name') . '</p>';
    wp_mail($to, $subject, $message, $headers);
});Add the code to the end of your child themes functions file or custom code snippets plugin.
Modify the text within these p tags to anything you like :
<p>If you have any questions, feel free to contact us.</p>'Example email :

Another option is to :
- Create your own custom email template
- Include all the customers order information:
- Order number
- Customer name
- List of products with quantities and prices
- Order total
// Disable admin cancellation email
add_filter('woocommerce_email_enabled_cancelled_order', '__return_false');
add_action('woocommerce_order_status_cancelled', function ($order_id) {
    $order = wc_get_order($order_id);
    if (!$order) {
        return;
    }
    $to = $order->get_billing_email();
    if (empty($to)) {
        return;
    }
    $subject = sprintf('Order #%s has been cancelled', $order->get_order_number());
    $headers = array('Content-Type: text/html; charset=UTF-8');
    // Start building the email content
    $message = '<div style="background-color: #f7f7f7; padding: 20px; font-family: Arial, sans-serif;">';
    $message .= '<div style="background-color: #ffffff; padding: 20px; border-radius: 5px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);">';
    
    // Header
    $message .= '<h1 style="color: #720eec; margin-bottom: 20px;">Order Cancelled</h1>';
    
    // Order details
    $message .= '<p>Dear ' . esc_html($order->get_billing_first_name()) . ',</p>';
    $message .= '<p>Your order #' . esc_html($order->get_order_number()) . ' has been cancelled.</p>';
    
    // Order items
    $message .= '<h2 style="color: #720eec; margin: 20px 0;">Order Details</h2>';
    $message .= '<table style="width: 100%; border-collapse: collapse; margin-bottom: 20px;">';
    $message .= '<tr style="background-color: #f8f8f8;"><th style="padding: 10px; text-align: left;">Product</th><th style="padding: 10px; text-align: right;">Total</th></tr>';
    
    foreach ($order->get_items() as $item) {
        $message .= '<tr>';
        $message .= '<td style="padding: 10px; border-bottom: 1px solid #eee;">' . esc_html($item->get_name()) . ' × ' . esc_html($item->get_quantity()) . '</td>';
        $message .= '<td style="padding: 10px; border-bottom: 1px solid #eee; text-align: right;">' . wc_price($item->get_total()) . '</td>';
        $message .= '</tr>';
    }
    
    // Order totals
    $message .= '<tr><td colspan="2" style="padding: 10px;"></td></tr>';
    $message .= '<tr><td style="padding: 10px; text-align: right;"><strong>Total:</strong></td>';
    $message .= '<td style="padding: 10px; text-align: right;"><strong>' . wc_price($order->get_total()) . '</strong></td></tr>';
    $message .= '</table>';
    
    // Footer
    $message .= '<p>If you have any questions, please contact us.</p>';
    $message .= '<p>Thank you,<br>' . get_bloginfo('name') . '</p>';
    
    $message .= '</div></div>';
    wp_mail($to, $subject, $message, $headers);
});






Leave a Reply