БлогWordpressНавсегда защищаемся от спама в WordPress

Навсегда защищаемся от спама в WordPress

Всем привет. Если у вас есть сайт на WordPress, то вам должна быть знакома проблема заполонения своего сайта спам комментариями. Конечно, со спамом в WordPress отлично справляется плагин Akismet, который по умолчанию там установлен, но проблема этого плагина в том, что он частенько помечает как спам вполне человечные комментарии от реальных людей.

До недавнего времени я постоянно проверял папку со спамом на наличие ошибочно попавших туда комментариев. Обычно в день у меня на блоге в спам попадало около 50-70 комментариев. В конце концов меня это утомило, и я начал искать способ, который бы позволил мне избавиться от автоматического спама раз и навсегда. И я такой способ нашел 🙂 .

спам

Идея с капчей, которая могла бы немного выправить ситуацию, меня вообще не устраивала. Я думаю, что сегодня на блогах уже редко где встретишь капчу, она уходит в прошлое, и это правильно. Как-то я уже писал о том, что использование капчи на блоге отпугивает большинство комментаторов, а использование жуткой цифровой капчи полностью убивает желание комментировать.

После недолгих поисков, я нашел интересный и простой способ защиты от спама, который заключается в подмене текстовых полей, вот о нем я и хочу рассказать.

Суть этого способа в том, что мы создаем новое поле для комментария с новым именем, а старое поле спрячем от глаз посетителей. Спам-бот, по привычке, будет вводить комментарий в стандартное поле, так как настроен на это, но отправить этот комментарий он не сможет 🙂 . В то же время обычные посетители будут вводить комментарии в форму с новым именем, и при этом никаких изменений они даже не заметят.

Итак, перейдем к реализации этого метода. Существует два пути развития событий: либо у вас старая версия движка, и комментарии у вас выводятся через html код, либо у вас свежая версия, и комментарии выводятся через функцию comment_form().

Первый вариант

Рассмотрим вариант, когда комментарии выводятся через html код.

Первое, что нам нужно сделать, это найти в файле comments.php, в папке с темой оформления, строку, отвечающую за вывод поля для ввода комментария. Обычно оно выглядит так:

<textarea id="comment" class="textarea" name="comment"></textarea>

Эту строчку нужно заменить на следующую конструкцию:

<div class="spamform">
<textarea id="comment" class="textarea" name="comment"></textarea>
</div>
<textarea id="newcomment" class="textarea" name="newcomment"></textarea>

Следующим шагом нам нужно изменить стили для этих форм. Для того, чтобы скрыть старую форму от глаз посетителей, добавляем в файл style.css:

.spamform {display: none;}

Если к вашей старой форме комментариев были привязаны стили, то вам нужно заменить в style.css все id=»comment» на id=»newcomment», тогда ваша новая форма комментариев будет выглядеть как прежняя.

Ну и последним шагом вставляем в конец файла functions.php (до знака ?>) следующую функцию:

//spam_detect
add_filter('pre_comment_on_post', 'verify_spam');
function verify_spam($commentdata) {
$spam_test_field = trim($_POST['comment']);
if(<strong>!</strong>empty($spam_test_field)) wp_die('no-spam');
$comment_content = trim($_POST['newcomment']);
$_POST['comment'] = $comment_content;
return $commentdata; }
//end

Второй вариант

Теперь рассмотрим второй вариант, когда комментарии выводятся при помощи функции comment_form ().

Здесь алгоритм практически такой же как и в предыдущем пункте. Все, что нам нужно сделать, это добавить две функции в файл function.php:

//Добавляем поле комментария
add_filter('comment_form_defaults', 'change_comment_form_defaults');
function change_comment_form_defaults($default) {
$commenter = wp_get_current_commenter();
$default['comment_notes_after'] <strong>.</strong>=
'<p class="comment-form-real-comment">
<textarea id="newcomment" aria-required="true"  name="newcomment"></textarea>
</p>';
return $default;
}
//end

//spam_detect
add_filter('pre_comment_on_post', 'verify_spam');
function verify_spam($commentdata) {
$spam_test_field = trim($_POST['comment']);
if(<strong>!</strong>empty($spam_test_field)) wp_die('no-spam');
$comment_content = trim($_POST['newcomment']);
$_POST['comment'] = $comment_content;
return $commentdata;
}
//end

Первая функция добавляет новое поле для комментирования (аналог <textarea> в предыдущем пункте), а вторая функция проверяет, в какое поле был введен комментарий.

Все, что осталось сделать, это закрыть старое поле от глаз посетителей. Для этого вставляем в файл style.css следующую строчку:

.comment-form-comment {display: none;}

Опять же, для того, чтобы ваша новая форма комментариев выглядела как и прежняя, вам нужно в style.css изменить все id=»comment» на id=»newcomment».

После того, как я сделал подмену полей, у меня на блоге пока не появилось ни одного спам комментария. Думаю, если и найдется какой-нибудь спамер, который напишет комментарий вручную, то Akismet его легко вычислит 🙂 .

Понравилась статья? Подписывайтесь на мой RSS канал rss канал, следите за мной в Твиттере , или получайте статьи по почте:

5 отзывов к записи "Навсегда защищаемся от спама в WordPress"

  1. WPixel

    Akismet сам по себе делает подмену .Боты умные пошли слишком, в последнее время, за месяц более ста коментов кидают в спам

    • Seostager
      каким образом он делает подмену? если он делал, тогда бы и спама автоматического не было на блоге, как в данном примере. alismet просто использует свою огромную базу.
  2. WPixel

    блин перепутал его с антиспам би.

  3. Татьяна

    У меня акисмет стоит, да он частенько хорошие комментарии отправляет в спам, видимо надо его заменять. Спасибо за статью.

  4. Александр

    спасибо за способ, давно слышал о нем, но никак руки не доходили поставить

Оставить свой отзыв


  • Использую
  • По месяцам
  • GoGetLinks - лучшая биржа для продажи и покупки вечных ссылок.
  • Beget - один из лучших хостингов России по всем показателям.
  • Sape - ссылки все еще работают. Лучшая биржа временных ссылок и не только.
  • 2domains - очень дешевые домены для ваших сайтов. Надежный сервис - пользуюсь сам.
  • Блогун - лучший сервис для размещения постовых и обзоров на блоге.