From da2a463f3c0edd0eeaf74660c5b47e62e2892f03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20Sz=C3=A9pe?= Date: Wed, 8 Jan 2025 02:08:56 +0100 Subject: [PATCH] Validate WooCommerce customer email TLD --- mu-plugins/woocommerce-customer-email-tld.php | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 mu-plugins/woocommerce-customer-email-tld.php diff --git a/mu-plugins/woocommerce-customer-email-tld.php b/mu-plugins/woocommerce-customer-email-tld.php new file mode 100644 index 0000000..f4001c7 --- /dev/null +++ b/mu-plugins/woocommerce-customer-email-tld.php @@ -0,0 +1,65 @@ +add('invalid_email', __('The provided email address is not valid', 'woocommerce')); + return $validation_error; + } + + $domain = explode('@', $email, 2); + $parts = explode('.', idn_to_ascii($domain[1])); + $tld = array_pop($parts); + if (! in_array(strtoupper($tld), IANA_TLDS, true)) { + $validation_error->add('invalid_email_domain', __('The provided email address is not valid', 'woocommerce')); + } + return $validation_error; + }, + 20, + 4 +); + +add_action( + 'woocommerce_after_checkout_validation', + static function ($data, $errors) { + if (filter_var($data['billing_email'], FILTER_VALIDATE_EMAIL) === false) { + $errors->add('invalid_email', __('The provided email address is not valid', 'woocommerce')); + return; + } + + $domain = explode('@', $data['billing_email'], 2); + $parts = explode('.', idn_to_ascii($domain[1])); + $tld = array_pop($parts); + if (! in_array(strtoupper($tld), IANA_TLDS, true)) { + $errors->add('invalid_email_domain', __('The provided email address is not valid', 'woocommerce')); + } + }, + 20, + 2 +); + +/* Alternative to woocommerce_after_checkout_validation +add_action( + 'woocommerce_checkout_process', + static function () { + $email = filter_input(INPUT_POST, 'billing_email', FILTER_VALIDATE_EMAIL); + + wc_add_notice(__('The provided email address is not valid', 'woocommerce'), 'error'); + }, + 20, + 0 +); +*/