Đây là ảnh chụp màn hình của một trong những blog của mình:
Chỉ trong 1 tháng đã có vài ngàn bình luận spam tới trang blog này. Nhưng may mắn là mình đã tìm được giải pháp để chặn toàn bộ bình luận tạo bởi spambots. Một số lợi ích khi dùng cách này:
- Bạn không cần bất cứ plugin anti-spam nào.
- Cũng không cần captcha.
- Dễ dàng cài đặt chỉ với 3 bước.
Bước 1: Tạo 1 textare trong comment form
Đầu tiên, bạn nên tìm hiểu cách chèn bình luận vào trang như thế nào. Bình thường sẽ có 2 cách:
- HTML của form bình luận sẽ nằm trong file comments.php
- Form bình luận sẽ được chèn bởi hàm comment_form() của WordPress.
Nếu form bình luận nằm trong comments.php
Đơn giản chỉ là bạn thêm 1 textarea input field đằng sau comment textarea mặc định giống như thế này:
Vậy là xong rồi!
Nếu bình luận được chèn bởi hàm comment_for(), trong trường hợp này bạn sẽ dùng action hook sau đây:
function add_non_fake_textarea_field( $default ) {
$commenter = wp_get_current_commenter();
$default['comment_notes_after'] .=
'
';
return $default;
}
add_filter('comment_form_defaults', 'add_non_fake_textarea_field');
Chèn đoạn code này vào tập tin functions.php trong thư mục theme hiện tại là được nha :D.
Bước 2: Ẩn field giả bằng CSS
Bây giờ khi mở trang single post bạn sẽ thấy có tới 2 comment form. Vì vậy chúng ta cần ẩn đi 1 cái, đó phải là cái form mặc định vì đây sẽ là “cú lừa” cho mấy con bot.
Bạn có thể ẩn nó theo bất cứ cách nào bạn muốn, ví dụ:
#comment{
position:absolute;
left:-9000px;
}
.hello{
left: auto;
}
Bỏ vào tập tin style.css là được hen các bạn, còn nếu bạn thích bỏ ở đâu thì cũng được, miễn chạy là được =]]]
Bước 3: Chặn các bình luận spam
Bước cuối cùng, đoạn code dưới đây sẽ block tất cả bình luận được được điền vào textare bình luận mặc định. Mấy con bot sẽ không biết là nó đang điền vào “cú lừa” này. Bởi vì “cú lừa” sẽ không hiển thị với người dùng thật. Khá là đơn giản đúng không?
Thêm đoạn code sau đây vào file functions.php
function block_spam_comments($commentdata) {
$fake_textarea = trim($_POST['comment']);
if(!empty($fake_textarea)) wp_die('Error!');
$comment_content = trim($_POST['just_another_id']);
$_POST['comment'] = $comment_content;
return $commentdata;
}
add_filter('pre_comment_on_post', 'block_spam_comments');
Vậy là xong rồi đó các bạn.
Nếu có thắc mắc gì thì nhắn tin Facebook này hoặc email tới lienhe@monkeywp.dev nha :D.