Home » WooCommerce: Resend Any Order Email

WooCommerce: Resend Any Order Email

by adminkys

How annoying is the fact you can only resend the “New Order Notification” from the single order admin page? What if you’re testing out and customizing email templates, and need to email yourself the “processing” or the “completed” notification, without having to place a new test order or switching order status twice to re-trigger the notification?

Well, today we will see how to add a “Resend whatever email” function under the “order actions” on the single order edit page. Of course, make sure you switch the billing email to yours, otherwise the customer will get these emails and not you. Enjoy!

How poor from WooCommerce that you can’t resend a “completed” email notification (for example) from the Order actions! Let’s change that with a simple customization!

PHP Snippet: Allow Administrator to Resend Any Order Email

In this case, I’ve targeted the “customer processing” email. In order to do that, I’ve created a custom Order action (please note the custom ‘resend_processing‘ order action ID, because that’s used later in the trigger ‘woocommerce_order_action_resend_processing‘, so if you change that you also need to change the ‘woocommerce_order_action_{action}” hook name).

Also, you’ll need to call the correct email class, in my case: WC_Email_Customer_Processing_Order

/**
 * @snippet       Resend Emails @ WooCommerce Order Admin
 * @how-to        Get tutoraspire.com FREE
 * @author        Tutor Aspire
 * @compatible    WooCommerce 7
 * @donate $9     https://www.tutoraspire.com
 */

add_filter( 'woocommerce_order_actions', 'tutoraspire_resend_processing_email_action', 9999, 2 );

function tutoraspire_resend_processing_email_action( $actions, $order ) {
if ( $order->has_status( wc_get_is_paid_statuses() ) ) {
$actions['resend_processing'] = 'Resend processing email';
}
return $actions;
}

add_action( 'woocommerce_order_action_resend_processing', 'tutoraspire_resend_processing_email_trigger' );
 
function tutoraspire_resend_processing_email_trigger( $order ) {
WC()->mailer()->emails['WC_Email_Customer_Processing_Order']->trigger( $order->get_id(), $order, true );
}

You may also like