Here’s my personal attempt to fight against the WooCommerce My Account Page registration spam, without installing yet another captcha plugin.
I’m pretty sure this solution is not perfect, because spam bots are very “smart”, but it can help prevent most fake registrations.
The way I built it, is by adding a custom input field to the My Account Register form with an empty value. Hidden via CSS, this is not visible to the user – but it is visible to spam bots, which will try to post a value. The trick here is the validation check; an error will be generated if the input has a value, and therefore should prevent most fake registration to go through.
Take a look at the code, test it, and enjoy!
PHP Snippet: (Try to) Prevent Fake Spam Registrations @ My Account Page
/**
* @snippet Custom Captcha @ WooCommerce My Account Registration
* @how-to businessbloomer.com/woocommerce-customization
* @author Rodolfo Melogli, Business Bloomer
* @compatible WooCommerce 8
* @community https://businessbloomer.com/club/
*/
add_action( 'woocommerce_register_form', 'bbloomer_register_form_honeypot', 9999 );
function bbloomer_register_form_honeypot() {
echo '<p style="opacity: 0; position: absolute; top: 0; left: 0; height: 0; width: 0; z-index: -1;"><input type="text" name="bb_reg_hp" value="" tabindex="-1" autocomplete="off"></p>';
}
add_filter( 'woocommerce_registration_errors', 'bbloomer_register_form_honeypot_check', 9999, 3 );
function bbloomer_register_form_honeypot_check( $errors, $username, $email ) {
if ( isset( $_POST['bb_reg_hp'] ) && ! empty( $_POST['bb_reg_hp'] ) ) {
$errors->add( 'registration-error-invalid-honeypot', 'Sorry, our system flagged this registration attempt as non-human.' );
}
return $errors;
}
Added this to my functions.php a while a go. Still got thousands of spammers / fake registrations. So it doesn’t seem to work. Any update on this?
I guess it could be that bots have gotten smarter lately and can bypass this. In my tests I had 0 spam, so it could also be that your website is a spam target and mine was not
Hi,
Thanks for your article.
I added it to our code and it didn’t seem to work.
I used a different action hook instead:
Thanks for sharing!
It’s strange, when I create an account, the password visibility eye doesn’t appear.
Strange – can you try with the Storefront theme maybe?
Hello,
Thank you for sharing this useful piece of code. By any chance, would you have the same functionality but for WooCommerce reviews?
Best regards.
I don’t, but it’s only a matter of changing the hook