WordPress — защита комментариев от спама

Здравствуйте, дорогие друзья. Сегодня речь пойдёт о защите формы комментариев от спама на сайтах и блогах под управлением WordPress. Да, я уже рассказывал несколько раз о том, как сделать надёжную защиту. И метод с подменой палей в форме комментариев является самым надёжным способом от спам-ботов.

Но, всё дело в том, что после обновления движка до версии 4.4, защита с подменой полей перестала работать. Так как расположение полей в форме поменялось с ног на голову.

Я получил и продолжаю получать много писем и сообщений о том, что нужно доработать метод и так далее. Честно говоря, времени так мало, что всё откладывал это дело.

И вот наконец-то, я нашёл минутку и внёс необходимые доработки в метод подмены полей.

И теперь вы снова сможете его использовать на своих сайтах и блогах.

Опять рассказывать о принципах метода не буду, кто не в курсе, почитайте статью по ссылке выше. Сразу перейдём к делу.

Добавление дополнительного поля в форму комментариев

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

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

Старая форма

А в новых шаблонах прописана только функция вызова формы.

Новая форма

Сама же форма прописывается в других файлах или вовсе в файле движка.

Ваша задача выяснить, как у вас устроена форма комментариев. Для этого перейдите в административную панель, раздел «Внешний вид»«Редактор» и посмотрите файл comments.php.

Если у вас комментарии устроены по первому примеру, тогда добавляйте дополнительно поле по моей прошлой статье, ссылка выше (подробнее смотрите в видео).

Если у вас второй вариант, тогда переходите в файл 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-main-comment">
 <textarea id="main-comment"
 aria-required="true" rows="8" cols="45" name="main-comment"></textarea>
 </p>';
 return $default;
}
/*дополнительное поле формы комментария*/

Дополнительное поле

Далее, переходим к добавлению спам-фильтра.

Добавление функции СПАМ-фильтра

Далеко не уходим, и следом за функцией дополнительного поля добавляем функцию СПАМ-фильтра (как показано на скриншоте выше).

/*спам-фильтр*/
add_filter('pre_comment_on_post', 'verify_spam');
function verify_spam($commentdata) {
 $spam_test_field = trim($_POST['main-comment']);
 if(!empty($spam_test_field)) wp_die('СПАМ');
 $comment_content = trim($_POST['comment']);
 $_POST['main-comment'] = $comment_content;
 return $commentdata;
}
/*спам-фильтр*/

Итак, всё почти готово, сейчас в вашей форме комментариев должно отображаться дополнительное поле:

Поле в форме

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

Теперь задача скрыть это дополнительно поле.

Настройка стилей дополнительного поля

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

#main-comment {display:none;}

Только будьте внимательны, вы должны его добавить перед медиазапросами. Иначе, он будет срабатывать только при выполнении медиазапроса.

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

Видеоинструкция

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

Друзья, на этом сегодня всё. Желаю вам удачи и до встречи на страницах моего блога!

С уважением, Максим Зайцев.

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

    Здравствуйте, Максим! А у меня не появилось дополнительное поле, форма комментариев новый шаблон, сделала как вы написали в статье.

    1. Максим Зайцев (автор)

      Здравствуйте, Елена. Значит вы неправильно вставили функцию, не в том месте. Или быть может у вас на сайте включен плагин кэширования и вы видите старую версию сайта. Если так, то сбросьте кэш на сайте и в браузере и проверьте ещё раз. Желаю удачи!

  2. Вика

    Здорово! Сейчас у себя попробую настроить! Спасибо за инструкции. Максим, а у меня вопрос не по теме поста, скажите, а Вы собираетесь настраивать https для домена сайта? Очень интересует этот вопрос, и хотелось бы увидеть поэтапную инструкцию именно от Вас.

    1. Максим Зайцев (автор)

      Здравствуйте, Виктория. На текущий момент не планировал переезд на https. Но, как буду, так обязательно напишу статью.

  3. Антон

    Здравствуйте! Если вставляю в конец файла функций то код спам фильтра попадает в код страниц и виден :-( Добавил код перед ?> все заработало! Получается, у меня его нужно заключить в . И еще. Когда оставляю комментарий или правлю код из редактора при нажатии на кнопку обновления файла остается просто пустой экран со страницей wp-admin/theme-editor.php! Получается, команда отработала но не вернула на страницу. В чем может быть причина?

    1. Максим Зайцев (автор)

      Антон, всё дол в том, что функции вставлены неверно. В файле функции темы у вас в конце закрытие пхп ?> Так вот вам не нужно вставлять код перед закрытием, удалите ?> и вставьте функции.

      1. Антон Севостьянов

        А что по поводу » Когда оставляю комментарий или правлю код из редактора при нажатии на кнопку обновления файла остается просто пустой экран со страницей wp-admin/theme-editor.php! Получается, команда отработала но не вернула на страницу. В чем может быть причина?»
        Не подскажете в чем может быть причина?

        1. Максим Зайцев (автор)

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

  4. Roman

    Спасибо за статью, всё получилось. Спама теперь нет, как отрезало

  5. НИКОЛАЙ

    А КАК ЗАКРЫТЬ ССЫЛКИ В КОММЕНТАРИЯ ОТ ИНДЕКСАЦИЙ
    И КАК УБРАТЬ ПОЛЕ САЙТ В ФОРМЕ ОТПРАВКИ КОММЕНТАРИЯ
    В МОЁМ БЛОГЕ wordpress

    1. Максим Зайцев (автор)

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

Добавить комментарий