Search code examples
wordpresscontact-form-7

How do I check if email submitted via Contact form 7 exists in my database?


When customer submits email via contact form 7, how do I check if email already exists in my database and change notification message to "Your email already exists in our database"

So far I have tried using before_send hook, but when I click submit, the page just hangs and no confirmation message.

Below is the function I have in my functions.php

add_action( 'wpcf7_before_send_mail', 'check_email' );

function check_email( $cf7 )
{
$email = $cf7->posted_data["email"];
if($email == 'Is in our database'){
echo ('Your email exists in our database');
}
}

Thanks for your help


Solution

  • I've added a filter on validation:

    add_filter( 'wpcf7_validate', 'email_already_in_db', 10, 2 );
    
    function email_already_in_db ( $result, $tags ) {
        // retrieve the posted email
        $form  = WPCF7_Submission::get_instance();
        $email = $form->get_posted_data('your-email');
        // if already in database, invalidate
        if( email_exists( $email ) ) // email_exists is a WP function
            $result->invalidate('your-email', 'Your email exists in our database');
        // return the filtered value
        return $result;
    }
    

    In this case the email field is named your-email.

    The function email_exists is a native WP function to handle this.