Menu Close

WooCommerce: “New Order” Email Recipient Based on Billing Country

default

The amazing thing about WooCommerce is that you can override any setting with a few lines of code. In today’s example we will try to code a solution where the “New Order” WooCommerce email will be delivered to a custom recipient based on the billing country.

This could be helpful when the WooCommerce store is managed by multiple people, and you want to make sure that order notifications only go to the right manager. Enjoy!

By default you can set one or more “New Order” email recipients. But what if you want to change the recipient based on the order billing country? Well, the snippet below gives you a quick solution!

PHP Snippet: Change WooCommerce “New Order” Email Recipient Based on Billing Country

/**
 * @snippet       Switch New Order Email Recipient Based on Billing Country
 * @how-to        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 8
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

// PART 1
// Lets define the array of 'country code' => 'email' pairs

function bbloomer_location_admin( $location ) {
	$admins = array(
		'US' => 'usamanager@test.com', 
		'CA' => 'canadamanager@test.com', 
      // etc
	);
	return $admins[$location];
}

// PART 2
// Lets set the new order email recipient

add_filter( 'woocommerce_email_recipient_new_order', 'bbloomer_dynamic_recipient', 9999, 3 );
 
function bbloomer_dynamic_recipient( $email_recipient, $order_object, $email ) {
	if ( is_admin() ) return $email_recipient;
	if ( $order_object && $location = $order_object->get_billing_country() ) {
		$email_recipient = bbloomer_location_admin( $location );
	}
	return $email_recipient;
}
View Source
Posted in WooCommerce Tips