Contact Form 7 là một trong những plugin hỗ trợ tốt khi bạn sử dụng WordPress để tạo form liên hệ, đăng ký… Bài viết này giải quyết vấn đề bị spam và cách chống spam khá hiểu quả đó là:
1. Validate chống spam số điện thoại trong Contact Form 7
1.1Code khách hàng nhập đủ 10 số mới được
Ở trường tel code là: [tel* your-phone minlength:10 maxlength:10]
Trong đó:
- minlength:10 Độ dài tối thiểu được phép cho trường đầu vào này.
- maxlength:10 Độ dài tối đa được phép cho trường đầu vào này
2.2 Code KH nhập đầu số phải bằng 0 và đúng đầu số của các nhà mạng
Chúng ta đặt rule phải gõ đúng SĐT ở form số điện thoại phải đạt các điều kiện:
- 10 số
- Số đầu tiên phải là 0
- Số thứ 2 phải là 3, 5, 7, 8, 9
Để validate số điện thoại trong Contact Form 7 thì chúng ta cần bổ sung code sau vào file functions.php
của theme hoặc child theme của website.
function custom_filter_wpcf7_is_tel( $result, $tel ) {
$result = preg_match( '/^(032|033|034|035|036|037|038|039|086|096|097|098|081|082|083|084|085|088|091|094|056|058|092|070|076|077|078|079|089|090|093|099|059)+([0-9]{7})$/;', $tel );
return $result;
}
add_filter( 'wpcf7_is_tel', 'custom_filter_wpcf7_is_tel', 10, 2 );
2. Chống spam bằng cách kiểm tra người dùng scroll chuột hay chưa
Cơ chế hoạt động: Thường thì form được đặt ở giữa hoặc cuối trang web, buộc người dùng phải cuộn xuống mới có thể điền thông tin và gửi đi, đúng không? Vì thế, mình sẽ tính toán số lần người dùng cuộn trang và khi đạt đến một mức độ hợp lý, hệ thống sẽ cho phép người dùng gửi form.
Ưu điểm:
- Không gây phiền toái cho người dùng, tương tự như cách 1.
- Đơn giản và không ảnh hưởng đến giao diện của form.
Nhược điểm:
- Chưa có.
Cách thực hiện: Chỉ cần thêm đoạn code sau vào tệp wp-content/themes/{your-theme}/functions.php
.
/*
* Check spam cf7 bằng scroll
* Author: levantoan.com
* */
add_filter('wpcf7_form_elements', 'devvn_check_scroll_form_cf7');
function devvn_check_scroll_form_cf7($html){
$html = '
' . $html;
return $html;
}
add_action('wpcf7_posted_data', 'devvn_check_scroll_form_cf7_vaild');
function devvn_check_scroll_form_cf7_vaild($posted_data) {
$submission = WPCF7_Submission::get_instance();
$scroll = isset($posted_data['devvn-scroll']) ? intval($posted_data['devvn-scroll']) : 0;
//nếu form ở ngay trên đầu page thì thay 5000 thành số nhỏ hơn. ví dụ 200
if (!$scroll || $scroll <= 5000) {
$submission->set_status( 'spam' );
$submission->set_response( 'You are spamer' );
}
unset($posted_data['devvn-scroll']);
return $posted_data;
}
add_action('wp_footer', function (){
?>
Nguồn bài viết tham khảo: