Защита от спама в WordPress без плагина

защита от спама wordpress

Защита от спама в WordPress — рано или поздно все блогеры задаются этим вопросом. Есть разные способы борьбы со спамом.Самый простой, но не самый лучший способ это установить палагин.

Вот парочка самых популярных:

Вместо этого я просто сделал эту защиту от спаса вручную — способ очень простой.

Способ заключается в том, что мы скрываем стандартное поле для ввода комментария ‘comment‘ и заменяем его на новое созданное  поле ‘real-comment‘. Для посетителей  все останется без изменений  они и не заметят разницы, а вот спам-скрипты при  попытке  заполнить стандартное поле с именем ‘comment‘ будут попадать на фильтр запрещающий им комментировать.

 

1. Проверка на спам

Начнем мы с добавления фильтра спама, у нас в форме комментария будет 2 поля. Одно скрытое — это стандартная форма ‘comment‘ и второе поле — это новое созданное нами поле. Добавляем функцию которая будет определять, если поле было заполнено комментатором — это видимое в шаблоне, то комментарий пропускается, а если скрытое, то публикация запрещается.

Для этого вставим такой код в 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;
}

2. Добавляем в шаблон новое поле для ввода комментария

Существует два варианта как это можно сделать:

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

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

и заменяем его на код:

<textarea id="comment" class="textarea" style="display: none;" name="comment"></textarea>
<textarea id="real-comment" class="textarea" name="real-comment"></textarea>

2. Второй вариант, если в шаблоне для вывода формы комментариев Вы используете функцию 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" cols="45" name="real-comment" rows="8"></textarea></p>'; 
return $default; }

На этом все, готово. У нас есть видимое поле для ввода комментария ‘real-comment‘ (можно использовать любое имя), а стандартное ‘comment‘ поле скрытое от посетителей. И есть функция которая фильтрует эти поля. Больше автоматический спам вас не побеспокоит.

Проверить работу  защиты от спама можно  на страничке  которую создал —  Kama

Не забываем оставлять свои комментарии без спама : )

Источник: Студия-ГОСТ

 

Обновление:

Если вам надо использовать в комментариях смайлики, то как один из вариантов решение описан тут.

Понравилась статья? Поделись с друзьями:
Комментариев: 28
  1. Anatoliy

    Здравствуйте.

    Очень помогала Ваша защита от спама, не пропускала не одного спам комментария, но к сожалению после обновления WordPress перестала работать. При отправке комментария открывается страница /wp-comments-post.php и появляется надпись «ОШИБКА: пожалуйста, введите комментарий».

    Возможно ли это как то исправить. Заранее благодарен за помощь.

  2. Anatoliy

    У меня стоит тема от Ксаны, там используется Ваш способ защиты. На форуме поддержки ответили — "Это работало на прежних версиях wordpress, а на последней версии работать перестало".

    Вот я и решил обратиться напрямую к Вам.

  3. Anatoliy

    Проверил, весь код присутствует.

  4. Anatoliy

    Буду ждать ответ

  5. Anatoliy

    Спасибо огромное, очень помогли. А то как код перестал работать, очень много появилось спам сообщений.

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

  7. [QUOTE="EvgeniyM, post: 336, member: 188"]Неплохой вы придумали способ защиты от спама, надо будет и себе его опробовать. Я вот свои сайты на wordpress защищаю от спама при помощи простенькой капчи, которая требует совершить несложные математические действия с числами. Это тоже довольно эффективный метод.[/QUOTE]

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

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

  9. Использую на своем блоге плагин Antispam Bee. Также включена функция премодерации комментариев. Два этих простых действия надежно защищают меня от спама. Спасибо за ваш способ, но перед его применением прочту вашу статью еще несколько раз, потому что опасаюсь копаться в коде.

  10. Garri (автор)

    [QUOTE="Hina, post: 369, member: 209"]Использую на своем блоге плагин Antispam Bee. Также включена функция премодерации комментариев. Два этих простых действия надежно защищают меня от спама. Спасибо за ваш способ, но перед его применением прочту вашу статью еще несколько раз, потому что опасаюсь копаться в коде.[/QUOTE]

    Если с кодом плохо знакомы, то конечно лучше плагин Antispam Bee, потому что у этого плагина такой же принцип работы.

  11. В принципе система защиты позволяет отфильтровать только скрипты, но и это уже не мало. От любителей наспамить руками такой ход не защищает. Кстати, [USER=188]EvgeniyM[/USER], с капчами тоже не все так просто. Есть сервисы, считывающие капчу, и это не самая лучшая защита.  Есть, конечно, и плагины антиспамовые, но они, насколько я помню, не бесплатные вовсе. Единственным реальным выходом остается задержка вывода комментариев в сочетании с переименованием полей.

    Кстати, а почему бы не выключить (закомментить) в коде само поле вообще? Тогда скрипты не будут распознавать возможность отправки сообщений и проходить мимо. Надо попробовать методику и нагнать спамеров для проверки.

  12. Считаю, что оба способа- и ручной, и с помощью плагина,  годны для защиты блога от спама. Но сперва нужно попробовать ручной, лишняя работа в WordPress никогда не повредит. А если и тут что-то не получается, можно скачать плагин.

  13. Я обычно закрываю комментарии к своим статья на блоге. Стоит только забыть это сделать, как мой ящик начинает трещать от спамных сообщений (стоит модерация).

    Знаете, что самое удивительное? Блог не раскручен, как только спамеры его находят — ума не приложу.

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

  14. Mvuser

    [quote="Svetka, post: 444, member: 257"]Хотя некоторым таким комментаторам я рада, тупо исправляю их комменты на мне угодные, типа создаю видимость общения.[/quote]

    О да, я так тоже делаю. Что бы не вредили блогу, я их комментарии превращаю в пользу.

  15. Подскажите как заблокировать подозрительные хосты,если при этом я знаю IP адреса с которых была произведенна отака

  16. Garri (автор)

    [QUOTE="Ekaterina, post: 566, member: 325"]Подскажите как заблокировать подозрительные хосты,если при этом я знаю IP адреса с которых была произведенна отака[/QUOTE]

    Сделать это можно через в файл .htaccess. Просто поменяйте xxx.xxx.xxx.xxx  на IP того нехорошего человека, который вас достаёт и всё — он будет забанен.

    [HTML]<Limit GET POST PUT>

    order allow,deny

    allow from all

    deny from xxx.xxx.xxx.xxx

    </LIMIT>[/HTML]

  17. Anatoliy

    Здравствуйте.

    Очень помогала Ваша защита от спама, не пропускала не одного спам комментария, но к сожалению после обновления WordPress перестала работать. При отправке комментария открывается страница /wp-comments-post.php и появляется надпись "ОШИБКА: пожалуйста, введите комментарий".

    Возможно ли это как то исправить. Заранее благодарен за помощь.

  18. Garri (автор)

    [USER=2507]Anatoliy[/USER], этот способ работает и на последней версии движка. Возможно вы обновили и свой шаблон? Проверьте по этапам весь ли код присутствует у вас на сайте.

  19. Anatoliy

    У меня стоит тема от Ксаны, там используется Ваш способ защиты. На форуме поддержки ответили — "Это работало на прежних версиях wordpress, а на последней версии работать перестало".

    Вот я и решил обратиться напрямую к  Вам.

  20. Anatoliy

    [quote="Garri, post: 3675"][USER=2507]Anatoliy[/USER], этот способ работает и на последней версии движка. Возможно вы обновили и свой шаблон? Проверьте по этапам весь ли код присутствует у вас на сайте.[/quote]Проверил, весь код присутствует.

  21. Garri (автор)

    [quote="Anatoliy, post: 3676, member: 2507"]"Это работало на прежних версиях wordpress, а на последней версии работать перестало".[/quote]

    Надо перепроверить у меня где-то было установлено на сайтах. А то может я и не в курсе :confused:

  22. Anatoliy

    Буду ждать ответ :)

  23. Garri (автор)

    [USER=2507]Anatoliy[/USER], Блин и правда не работало. Для новых версий 4.4 надо заменить код в functions.php:

    [PHP]//проверка на спам start

    add_filter(‘init’, ‘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;

    }

    //проверка на спам end[/PHP]

  24. Anatoliy

    [quote="Garri, post: 3680"][USER=2507]Anatoliy[/USER], Блин и правда не работало. Для новых версий 4.4 надо заменить код в functions.php:

    [PHP]//проверка на спам start

    add_filter(‘init’, ‘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;

    }

    //проверка на спам end[/PHP][/quote]Спасибо огромное, очень помогли. А то как код перестал работать, очень много появилось спам сообщений.

  25. Garri (автор)

    [USER=2507]Anatoliy[/USER], рад был помочь.

  26. greatebattle

    Добрый день.
    Пользуюсь этой функцией, и тоже столкнулась с сообщение «Введите комментарий». На старом долгоживущем блоге (ВП 4.5) комменты идут нормально, на только что созданном (ВП 4.7) при незаполненном поле comment вылезает сообщение «ОШИБКА: пожалуйста, введите комментарий». Но если заполнить comment, срабатывает ловушка для спама и вылезает ожидаемое «Спаму нет». Не понимаю, в чём дело, неужели опять версия изменилась?

    1. greatebattle

      Пардон, ложная тревога. Нашла у себя ошибку в коде.

Добавить комментарий
Screenshot.png
Общаясь и проявляя активность в Клубе по WordPress

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