1BANNER 123
5/5 - (98 bình chọn)

Đối với các quản trị web thì việc nhận được nhiều form đăng ký từ CF7 với thông tin trùng lặp là điều không thể tránh khỏi. Vậy có cách nào để có thể ngăn chặn người dùng gửi nhiều form với cùng một thông tin.

Contact form 7 thường sẽ thực hiện gửi email ngay khi submit, nó không lưu bất kì một thông tin nào về database, chính vì thế việc chống trùng lập thông tin là không thể. Tuy nhiên, nếu chúng ta cho các thông tin đó vào database và trả về thông báo ngay trước khi gửi thì sẽ như thế nào.

Việc đó hoàn toàn có thể áp dụng được. Và sau một thời gian tìm hiểu thì mình biết cách để có thể thực hiện việc này. Hãy theo dõi bài viết dưới đây để biết thêm thông tin nhé.

Tải thông tin từ CF7 lên database

Có rất nhiều plugin để có thể tải thông tin từ CF7 lên database, trong số đó thì mình sử dụng plugin contact form 7 to database extension

Bạn có thể tại plugin này trên github nhé. Tải tại đây.

Bạn chỉ cần tải về và up lên website một cách thủ công là được nhé.

Plugin này giúp bạn có thể lưu các thông tin của khách hàng lên database.

Ngăn chặn việc trùng lặp thông tin đăng ký của CF7.

Plugin trên chỉ giúp bạn lưu thông tin, còn nếu như bạn muốn ngăn chặn trùng lặp nội dung, bạn phải thêm một đoạn function sau vào file function.php

Ví dụ như bạn tạo một form liên hệ với nội dung như sau:

Cấu trúc của form đăng ký

Trong hình trên gồm 2 cái bạn nên chú ý, 1 là tên form, 2 là tên field email.

Còn đây là đoạn functio

function is_already_submitted($formName, $fieldName, $fieldValue) {
    require_once(ABSPATH . 'wp-content/plugins/contact-form-7-to-database-extension/CFDBFormIterator.php');
    $exp = new CFDBFormIterator();
    $atts = array();
    $atts['show'] = $fieldName;
    $atts['filter'] = "$fieldName=$fieldValue";
    $atts['unbuffered'] = 'true';
    $exp->export($formName, $atts);
    $found = false;
    while ($row = $exp->nextRow()) {
        $found = true;
    }
    return $found;
}
 
function my_validate_email($result, $tag) {
    $formName = 'form contact'; //Tên form
    $fieldName = 'email-752'; //Tên field email hoặc text
    $errorMessage = 'Email này đã được đăng ký, vui lòng nhập email khác'; //Thông báo khi trùng email
    $name = $tag['name'];
    if ($name == $fieldName) {
        if (is_already_submitted($formName, $fieldName, $_POST[$name])) {
            $result->invalidate($tag, $errorMessage);
        }
    }
    return $result;
}
add_filter('wpcf7_validate_email*', 'my_validate_email', 10, 2);// áp dụng cho field email là bắt buộc
add_filter('wpcf7_validate_email', 'my_validate_email', 10, 2); //áp dụng cho field email là không bắt buộc
add_filter('wpcf7_validate_text*', 'my_validate_email', 10, 2); //áp dụng cho field text là bắt buộc
add_filter('wpcf7_validate_text', 'my_validate_email', 10, 2); //áp dụng cho field text là không bắt buộc

Vầy là xong nhé!!!

Thông báo khi email trùng

Hi vọng bài viết này có thể giúp ít bạn trong việc quản lý các thông tin mà khách hàng đăng ký nhé. Nếu có bất kì một câu hỏi nào, các bạn có thể đặt câu hỏi và mình hứa sẽ trả lời trong thời gian gần nhất.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *