Шаг №39. Как избавиться от автоматического спама на сайте НАВСЕГДА?

Привет друзья, с момента написания последней статьи Как избавиться от спама на сайте прошло уже 12 дней. Эти дни я тестировал систему, о которой писал в прошлой статье, за эти 12 дней я сделал вывод — количество спама действительно сократилось, но спам не исчез полностью, меня это не устраивало и в связи с этим я стал искать методы как избавиться от спама.И нашел отличное решение!

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

Напомню еще раз, цель – избавиться от спама на сайте без применения различных анти-спамных плагинов, таких как Akismet, который как правило идет сразу с дистрибутивом wordpress.

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

На картинке таже схема, которую я описал выше.

Схема избавления от спама на сайте!

Как избавиться от автоматического спама на сайте НАВСЕГДА?

Итак опишу немного схему:

Есть 2 поля для ввода комментария (№1 и №2)

При нажатии на кнопку “Отправить комментарий” будем проверять если поле №1 заполнено это явно комментарий отправляет спам-бот, его мы не будем принимать.

Если поле №1 пустое, а заполнено поле №2 – тогда комментарий можно пропустить, он написан посетителем сайта, а не автоматическим спам-ботом.

Надеюсь объяснил понятно, теперь давайте реализуем это дело на практике.

Избавляемся от автоматического спама на сайте.

Нам необходимо добавить поле №2 на сайт.И тут нужно немного подумать.

Есть 2 варианта развития событий, если Ваш шаблон поддерживает новую функцию comment_form() (была введена в версии wordpress 3.0), и если не поддерживает.

Как это проверить?Легко – откройте файл comments.php и посмотрите есть ли в коде вызов этой функции, и если есть то да – Ваш шаблон действительно поддерживает функцию comment_form() и вам нужно воспользоваться 1 вариантом.

Если вместо вызова функции вы видите такие строки :

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

Значит действуйте с указаниями которые найдете в варианте №2.
После выполнения действий по варианту №1 или №2 будут еще действия, которые нужно выполнить всем – это добавить обработчик на нажатие клавиши “Отправить комментарий”.

Вы еще не передумали избавиться от спама на сайте?Нет?Тогда приступим=)

Вариант № 1.Шаблон использует функцию comment_form();

Открываем файл шаблона functions.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'] .=
  '<p class="comment-form-real-comment">
  <label for="real-comment">Комментарий</label><textarea id="real-comment"
  aria-required="true" rows="8" cols="45" name="real-comment"></textarea>
  </p>';
  return $default;
}

Проверьте еще раз, данный код не должен разрывать выполнение других функций в файле functions.php
Иначе могут возникать различные ошибки, и приводить к неработоспособности сайта в целом.
Теперь нам нужно добавить строку, которая скроет поле №1, для этого в файл стилей style.cssвставляем

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

Вариант № 2.Шаблон не использует функцию comment_form();

Если шаблон не поддерживает функцию comment_form() не стоит расстраиваться, откройте файл comments.php Вашего шаблона и найдите код выводящий поле для ввода коментария похожий на этот:

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

И замените его на вот этот:

<div class="smo">
  <textarea id="comment" class="textarea" name="comment"></textarea>
</div>   <textarea id="real-comment" class="textarea" name="real-comment">
</textarea>

Так, дополнительное поле добавили, теперь нужно скрыть поле ввода для спамеров, открываем файл style.css и добавляем там строку:

.smo {display: none;}

Финальный аккорд, добавляем функцию проверяющую из какого поля был отправлен комментарий.

Осталось совсем немного, открываем файл functions.php и вставляем еще один код, который будет отсеивать спам комментарии:

add_filter('pre_comment_on_post', 'verify_spam');
function verify_spam($commentdata) {
  $spam_test_field = trim($_POST['comment']);
  if(!empty($spam_test_field)) wp_die('Спам НЕ ПРОЙДЕТ!');
  $comment_content = trim($_POST['real-comment']);
  $_POST['comment'] = $comment_content;
  return $commentdata;
}

Вот и все, проделав эти простые действия вы избавитесь от автоматического спама на сайте НАВСЕГДА!!!

Друзья — жду Ваших комментариев, если что-то не получается задавайте свои вопросы!

Друзья получилось ли у Вас избавиться от спама на сайте этим методом?

  • http://mes-blog.com.ua Евгений

    Ну вот Артем, я же говорил, что тот метод не избавит тебя от спама навсегда!) А вот метод, который я использовал на блоге — http://mes-blog.com.ua/wordpress/zawita-wordpress-ot-spama.html

    Уже четвертый месяц юзаю и все как часы, спаму нет никакого!)

  • http://netbu.ru/ Дмитрий Байдук

    Ни разу меня спамом в комментах не заваливали. Сначала Akismet был, только он нормальные комменты иногда в спам отправлял, а сейчас Antispam Bee стоит, так за полгода только сегодня 2 сообщения спамерских просочилось

    • http://wpcreate.ru Артем Петрусенко

      Только этот метод позволил вздохнуть свободно, акисмет не нравился потому что пропускал и нормальные комментарии, а потом приходилось вручную просматривать.

      • http://mes-blog.com.ua Евгений

        Должна быть связка, Акисмент и этот хак, Акисмент как правило защищает от ручного спама, а этот защищает от авто спама спам-скриптами)

  • http://moneywillbe.in.ua Шарапик

    Пара вопросов:
    1. Почему-то при добавлении add_filter в functions.php вместо загрузки сайта определяется ошибка кода в этой строке.
    2. pre_comment_on_post это название функции по умолчанию в wp? где она находится?

    • http://wpcreate.ru Артем Петрусенко

      Скорее всего разорвали работу какой то другой функции,посмотрите на целостность выполнения.

  • Николай

    Хороший был шаг 38, а 39 — только для профессионалов. Я вот новичок, я так и не понял, где в каких папках искать эти файлы (тем более в разных есть одни и те же). Сделал наобум — сломался блог. Вернул назад. Может подправите пост и с учетом новичков в этом деле?

  • http://Www.tax-support-spb.ru Наталья

    Артем, совсем для чайников — кто такие боты и зачем они пишут спамерские комментарии?)

    • http://wpcreate.ru Артем Петрусенко

      Боты — это программы которые посещают сайты в интернете и под видом пользователей оставляют комментарии, бывают даже неприличного содержания.

      • http://vlados.com Андрей

        Походу ты не шаришь чувак!

  • fere

    Артем, спасибо за информацию!
    скажите, а на юкозе такое возможно использовать?
    или может есть варианты для юкоза хотя бы от ботов избавиться

    • http://wpcreate.ru Артем Петрусенко

      По поводу Юкоза, этот вариант не сработает.А для wp очень даже ничего!

  • fere

    извиняюсь, нашел нужное, просто в попыхах не сразу сообразил что тут все только для WP

  • Федор

    привет Артем! Все проделал по варианту 2, на сайте появилась сверху строка

    add_filter(‘pre_comment_on_post’, ‘verify_spam’); function verify_spam($commentdata) { $spam_test_field = trim($_POST[‘comment’]); if(!empty($spam_test_field)) wp_die(‘Спам НЕ ПРОЙДЕТ!’); $comment_content = trim($_POST[‘real-comment’]); $_POST[‘comment’] = $comment_content; return $commentdata; }

    • Татьяна

      У меня так же, хотя делала все как написано.

      • http://wpcreate.ru Артем Петрусенко

        Татьяна, эту функцию нужно вставлять в файл functions.php в папке с шаблоном, между < ? php и ?>

  • Федор

    короче после вторжений не могу в админку зайти, показывает пустую страницу. Что делать? Есть шаг №3?

    • http://wpcreate.ru Артем Петрусенко

      Федор, попробуй эту функцию вставить до закрывающего ?>

  • Pingback: Как защитить сайт от спама | Пространство сайтостроения()

  • Нелли

    Артем, еще раз спасибо огромное за Ваш блог. Боюсь вставлять код из варианта №1. Проверьте плиз правильно ли я выбрала место в файле functions.php
    <?php endif;

    add_filter('comment_form_defaults', 'change_comment_form_defaults');
    function change_comment_form_defaults($default) {
    $commenter = wp_get_current_commenter();
    $default['comment_notes_after'] .=
    '
    Комментарий
    ‘;
    return $default; ?>

  • http://delatsvoimirukami.ru/ Татьяна

    Артем, спасибо за подсказку. Попробую.

  • http://xn----dtbjnyckhefi.xn--p1ai/ Никита

    Артем, сделал как у Вас в уроке. Появились теперь два поля, но как я понял один то должен скрыться, а видно оба. Что-то не так или все нормально. 🙂

    • Марина

      попробуйте в css в другое место код переставить, у меня тоже сначала оба поля были

  • Марина

    Артем, спасибо, все получилось
    только от старой формы комментариев остался вот такой текст

    Можно использовать следующие HTML-теги и атрибуты:

    как его убрать?

    • Марина

      Артем, спасибо, все получилось, только от старой формы остался вот такой текст:

      Можно использовать следующие HTML-теги и атрибуты:

      как убрать?

  • http://vlados.com Андрей

    Это поразительно! Все получилось. 😎

  • http://www.pskovdivehanter.ru ОЛЕГ

    Как можно прекратить регистрацию на сайте из страны Китай. Сайт определяет IP из Китая ??? Как запретить регистрацию из Китая ???

  • Ольга

    Здравствуйте, Артем! когда-то по Вашему алгоритму я избавила блог от спам в комментах — но одолевают боты которые через форму подписки становятся подписчиками. Нельзя ли их тоже нейтрализовать как-то?