如何检查我的数据库中是否存在通过 Contact form 7 提交的电子邮件?

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

当客户通过联系表 7 提交电子邮件时,我如何检查电子邮件是否已存在于我的数据库中并将通知消息更改为 "Your email already exists in our database"

到目前为止,我已经尝试使用 before_send 挂钩,但是当我点击提交时,页面只是挂起并且没有确认消息。

下面是我的 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');
}
}

感谢您的帮助

我添加了验证过滤器:

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;
}

在这种情况下,电子邮件字段被命名为 your-email

函数 email_exists 是处理此问题的本机 WP 函数。

这是一个适用于我的插件 Advanced Contact form 7 DB

的解决方案
function email_already_in_db ( $result, $tags ) {
    // Retrieve the posted form
    $form  = WPCF7_Submission::get_instance();
    $form_posted_data = $form->get_posted_data();

    // Get the field name that we want to check for duplicates.
    // I added 'unique' to the beginning of the field name in CF7
    // Checking for that with preg_grep
    $unique_field_name = preg_grep("/unique(\w+)/", array_keys($form_posted_data));

    // $unique_field_name comes back as array so the next three lines give us the key as a string
    reset($unique_field_name);
    $first_key = key($unique_field_name);
    $unique_field_name = $unique_field_name[$first_key];

    // Check the form submission unique field vs what is already in the database
    $email = $form->get_posted_data($unique_field_name);
    global $wpdb;
    $entry = $wpdb->get_results( "SELECT * FROM wp_cf7_vdata_entry WHERE name LIKE '$unique_field_name' AND value='$email'" );

    // If already in database, invalidate
    if (!empty($entry)) {
      $result->invalidate($field_name, 'Your email: '.$email.' already exists in our database.');
      }
    // return the filtered value
  return $result;
}