How do I check if email submitted via Contact form

2019-06-12 07:52发布

问题:

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

回答1:

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.