Посвящается тем, кого утомили тонны спама в комментариях, оставляемые с единственной целью – повесить ссылку на продвигаемый спамером сайт. Есть, конечно, для этого дела много разных плагинов, типа Akismet, Bad Behavior, Parasite Eliminator. Но мне больше нравится следующий простой и эффективный метод, не требующий установки никаких плагинов. Нужно просто переименовать поля формы для ввода комментария. И всё! Спамерское программное обеспечение, которое рассылает спам по блогам в автоматическом режиме, как раз и ориентируется на наличие полей в форме с определенными именами. Куда и пытается совать всякую фигню типа "Отличный блог, добавил в закладки :)" ни в коем случае на забывая оставить ссылочку. В случае с WordPress это поля comment, email, url и author. Поэтому в директории, соответствующей установленной теме, нужно отредактировать файл comment.php следующим образом.
- Для начала 41-ую строку файла /wp-content/themes/<ваша тема>/forms/comment.php
<textarea name="comment" id="comment" rows="8" cols="40" tabindex="1"></textarea>
меняем на:
<textarea name="komment" id="komment" rows="8" cols="40" tabindex="1"></textarea>
- Далее 55-ую строку того же /wp-content/themes/<ваша тема>/forms/comment.php
<input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="2" />
меняем на:
<input type="text" name="aftar" id="aftar" value="<?php echo $comment_author; ?>" size="22" tabindex="2" />
- 60-ую строку файда /wp-content/themes/<ваша тема>/forms/comment.php
<input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="3" />
меняем на:
<input type="text" name="pochta" id="pochta" value="<?php echo $comment_author_email; ?>" size="22" tabindex="3" />
- 72-ую строку
<input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="4" />
меняем на:
<input type="text" name="sait" id="sait" value="<?php echo $comment_author_url; ?>" size="22" tabindex="4" />
- Затем в файле /wp-comments-post.php меняем код, где упоминаются эти поля формы:
$comment_author = ( isset($_POST['author']) ) ? trim(strip_tags($_POST['author'])) : null; $comment_author_email = ( isset($_POST['email']) ) ? trim($_POST['email']) : null; $comment_author_url = ( isset($_POST['url']) ) ? trim($_POST['url']) : null; $comment_content = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;
Заменяя оригинальные имена на полей на те, что придумали ранее:
$comment_author = ( isset($_POST['aftar']) ) ? trim(strip_tags($_POST['aftar'])) : null; $comment_author_email = ( isset($_POST['pochta']) ) ? trim($_POST['pochta']) : null; $comment_author_url = ( isset($_POST['sait']) ) ? trim($_POST['sait']) : null; $comment_content = ( isset($_POST['komment']) ) ? trim($_POST['komment']) : null;
Лично у меня после этих модификаций спам полностью прекратился. А до этого было по 15-20 штук спамерских сообщений в сутки. Хоть на сайте они и не появлялись, так как Akismet их прилежно отлавливал, но все равно нужно было вручную удалять из админки весь этот хлам, чтобы не замусоривать базу данных. Новые имена полей могут быть любыми, лишь бы они отличались от исходных.
Недостаток такого метода в том, что после обновления WordPress изменения, скорей всего, потеряются и нужно будет либо проделать правки заново, либо пред обновлением сохранить файлы comment.php и wp-comments-post.php, а после обновления – заменить новые на старые. Кроме того, спам через trackback-и все равно пролезет. Поэтому нужно либо их запретить (например, правилами модуля Apache ModRewrite), либо поставить какой-то плагин вроде Simple Trackback Validation.
Все это проверялось на версиях WordPress 2.9.0 и 2.9.1. Для других версий могут быть отличия в коде и в номерах строк.