Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending email to customer on cancelled order in Woocommerce

I am trying to send an email to the client when an order gets cancelled. By default, woocommerce only sends this email only to the admin of the site. This code has solved the issue for related posts on the web:

function wc_cancelled_order_add_customer_email( $recipient, $order ){
   return $recipient . ',' . $order->billing_email;
}
add_filter( 'woocommerce_email_recipient_cancelled_order', 'wc_cancelled_order_add_customer_email', 10, 2 );
add_filter( 'woocommerce_email_recipient_failed_order', 'wc_cancelled_order_add_customer_email', 10, 2 );

However, it seems like woocommerce removed those filter hooks completely. Is there any way of doing this?

Thanks in advance!

like image 748
KevDev Avatar asked Dec 05 '17 07:12

KevDev


People also ask

How do you tell a customer their order is Cancelled?

Say more than a “goodbye” Thank customers for their business. Confirm the cancellation. Reassure them that your door is always open for them and how to get back. Offer incentives, or ask for customers' feedback through surveys.

Does WooCommerce send emails to customers?

All you need to do is set up a mailing list, and then configure WooCommerce to send out emails to that list. PRO TIP: Yes, WooCommerce sends emails to customers by default. These include new order confirmation emails, customer invoice emails, and customer note emails.


1 Answers

In this custom function hooked in woocommerce_order_status_changed action hook, I am targeting "cancelled" and "failed" orders sending an the corresponding email notification to the customer (as admin will receive it on his side by WooCommerce automated notifications):

add_action('woocommerce_order_status_changed', 'send_custom_email_notifications', 10, 4 );
function send_custom_email_notifications( $order_id, $old_status, $new_status, $order ){
    if ( $new_status == 'cancelled' || $new_status == 'failed' ){
        $wc_emails = WC()->mailer()->get_emails(); // Get all WC_emails objects instances
        $customer_email = $order->get_billing_email(); // The customer email
    }

    if ( $new_status == 'cancelled' ) {
        // change the recipient of this instance
        $wc_emails['WC_Email_Cancelled_Order']->recipient = $customer_email;
        // Sending the email from this instance
        $wc_emails['WC_Email_Cancelled_Order']->trigger( $order_id );
    } 
    elseif ( $new_status == 'failed' ) {
        // change the recipient of this instance
        $wc_emails['WC_Email_Failed_Order']->recipient = $customer_email;
        // Sending the email from this instance
        $wc_emails['WC_Email_Failed_Order']->trigger( $order_id );
    } 
}

Code goes in function.php file of your active child theme (or theme) or also in any plugin file.

This should works in WooCommerce 3+

If you need, instead of changing the email, you can add it, to existing recipients:

// Add a recipient in this instance
$wc_emails['WC_Email_Failed_Order']->recipient .= ',' . $customer_email;

Related answer: Send an email notification when order status change from pending to cancelled

like image 54
LoicTheAztec Avatar answered Nov 03 '22 22:11

LoicTheAztec