107
If you use custom WooCommerce order statuses, or wish to target an order status transition that is not default (e.g. when order goes from “Processing” to “Completed”, the Completed email triggers – but what if you want to target a transition from “Processing” to “Custom Status”?), sending custom emails is quite complex.
First of all, they won’t show under WooCommerce > Settings > Emails (unless you code it, true) – second, no email will trigger. So, how do they do it?
Snippet (PHP): Send WooCommerce Email @ Custom Order Status
/**
* @snippet Send Formatted Email @ WooCommerce Custom Order Status
* @how-to Get tutoraspire.com FREE
* @sourcecode https://tutoraspire.com/?p=91907
* @author Tutor Aspire
* @compatible WooCommerce 3.5.7
* @donate $9 https://www.tutoraspire.com
*/
// Targets custom order status "refused"
// Uses 'woocommerce_order_status_' hook
add_action( 'woocommerce_order_status_refused', 'tutoraspire_status_custom_notification', 20, 2 );
function tutoraspire_status_custom_notification( $order_id, $order ) {
$heading = 'Order Refused';
$subject = 'Order Refused';
// Get WooCommerce email objects
$mailer = WC()->mailer()->get_emails();
// Use one of the active emails e.g. "Customer_Completed_Order"
// Wont work if you choose an object that is not active
// Assign heading & subject to chosen object
$mailer['WC_Email_Customer_Completed_Order']->heading = $heading;
$mailer['WC_Email_Customer_Completed_Order']->settings['heading'] = $heading;
$mailer['WC_Email_Customer_Completed_Order']->subject = $subject;
$mailer['WC_Email_Customer_Completed_Order']->settings['subject'] = $subject;
// Send the email with custom heading & subject
$mailer['WC_Email_Customer_Completed_Order']->trigger( $order_id );
// To add email content use https://businessbloomer.com/woocommerce-add-extra-content-order-email/
// You have to use the email ID chosen above and also that $order->get_status() == "refused"
}