Menu Close

WooCommerce: My Account Registration Anti-Spam Honeypot

default

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        Get CustomizeWoo.com FREE
 * @author        Rodolfo Melogli
 * @compatible    WooCommerce 8
 * @donate $9     https://businessbloomer.com/bloomer-armada/
 */

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;
}
View Source
Posted in WooCommerce Tips