WooCommerce: Prevent Orders From Blacklisted Email Addresses

In some cases, you may need to block certain customers from completing orders on your WooCommerce store.

This could be due to fraud prevention, policy violations, or simply wanting to prevent repeat offenders from making purchases. Thankfully, WooCommerce provides the flexibility to implement an email blacklist with just a few lines of code.

In this tutorial, I’ll show you how to add a simple email blacklist using a custom function that checks the customer’s email at checkout. By adding these 8 lines of PHP to your theme’s functions.php file, you’ll be able to prevent orders from specific email addresses efficiently. Enjoy!

This is the “nice” error customers get once they “Place Order” on the WooCommerce Checkout page in case their email has been blacklisted via the code snippet below!

PHP Snippet: Deny Checkout Based On WooCommerce Billing Email (Blacklist)

Kudos to Georgi, Patrick and Maarten for inspiration!

/**
 * @snippet       WooCommerce Checkout Blacklist
 * @how-to        businessbloomer.com/woocommerce-customization
 * @author        Rodolfo Melogli, Business Bloomer
 * @testedwith    WooCommerce 9
 * @community     https://businessbloomer.com/club/
 */

add_action( 'woocommerce_after_checkout_validation', 'bbloomer_blacklist_billing_email', 9999, 2 );

function bbloomer_blacklist_billing_email( $data, $errors ) {
	$blacklist = [ 'hello@example.com', 'info@lorem.io', 'me@john.co' ];
	if ( in_array( $data['billing_email'], $blacklist ) ) {
		$errors->add( 'blacklist', __( 'Sorry, our website is currently unable to process your request.', 'bbloomer' ) );
	}
}

Mini-Plugin: Business Bloomer WooCommerce Checkout Email Blacklist Mini-Plugin

You don’t feel confident with coding? You don’t want to purchase yet another bloated, expensive plugin? Great!

Business Bloomer WooCommerce Checkout Email Blacklist Mini-Plugin comes without the usual WordPress plugin hassles. One feature. Lifetime license. No annoying subscriptions. 1 plugin file. A few lines of code. No banners. No up-sells. No WordPress notifications. Use it on as many websites as you like. Lifetime support. 1-page documentation. Super simple settings.

Speaking of which, here are the settings:

And you can even add emails to the blacklist via a button on the order edit page:

Now if a customer tries to check out on the Classic Checkout or Checkout Block and their email happens to be blacklisted, they’ll get an error message:

The plugin is straight forward. Install it, add emails to the blacklist, and you’re good to go. Simple!

Where to add custom code?

You should place custom PHP in functions.php and custom CSS in style.css of your child theme: where to place WooCommerce customization?

This code still works, unless you report otherwise. To exclude conflicts, temporarily switch to the Storefront theme, disable all plugins except WooCommerce, and test the snippet again: WooCommerce troubleshooting 101

Related content

Rodolfo Melogli

Business Bloomer Founder

Author, WooCommerce expert and WordCamp speaker, Rodolfo has worked as an independent WooCommerce freelancer since 2011. His goal is to help entrepreneurs and developers overcome their WooCommerce nightmares. Rodolfo loves travelling, chasing tennis & soccer balls and, of course, wood fired oven pizza. Follow @rmelogli

6 thoughts on “WooCommerce: Prevent Orders From Blacklisted Email Addresses

  1. Thanks for the blacklist email code.

    I purchased your WooCommerce Toggle Payments By Country plugin and like the idea of your mini plugin for this code.

    I am currently using a plugin that is no longer supported and it allows the blacklisting of the email address, IP address, domain as well as first and or last name.

    Any plans on adding any of those functions to your plugin?

    Thank you

    1. Yes, I’m planning to build an add-on with additional blacklisting features, will keep you posted

  2. It it possible to block a domain with this? e.g whatever@spamdomain.com – block all users with a spamdomain.com email address?

    1. Hello Phil, thanks so much for your comment! Yes, this is definitely possible, but I’m afraid it’s custom work. If you’d like to get a quote, feel free to contact me here. Thanks a lot for your understanding!

  3. I got chatgtp to allow it to detect wildcard on domains 😉

    /**
     * @snippet       WooCommerce Checkout Blacklist
     * @how-to        businessbloomer.com/woocommerce-customization
     * @author        Rodolfo Melogli, Business Bloomer
     * @testedwith    WooCommerce 9
     * @community     https://businessbloomer.com/club/
     */
     
    add_action( 'woocommerce_after_checkout_validation', 'bbloomer_blacklist_billing_email', 9999, 2 );
     
    function bbloomer_blacklist_billing_email( $data, $errors ) {
       $blacklist = [ 'hello@example.com', 'info@lorem.io' ];
       if ( preg_match('/@(?:[a-zA-Z0-9.-]+\.)?joonix\.net$/i', $data['billing_email']) ) {
          $errors->add( 'blacklist', __( 'Sorry, our website is currently unable to process your request.', 'bbloomer' ) );
       }
    }
    
Questions? Feedback? Customization? Leave your comment now!
_____

If you are writing code, please wrap it like so: [php]code_here[/php]. Failure to complying with this, as well as going off topic or not using the English language will result in comment disapproval. You should expect a reply in about 2 weeks - this is a popular blog but I need to get paid work done first. Please consider joining the Business Bloomer Club to get quick WooCommerce support. Thank you!

Your email address will not be published. Required fields are marked *