На моём сайте столько много комментариев, целая сотня за месяц. Казалось бы хорошо, но при прочтении 75% из них уйдут в спам. Поэтому возникает вопрос: «Как защитить wordpress от спама в комментариях, не прибегая к капчи и дополнительным плагинам?»
Вот такая картина была у меня на блоге до применения этого способа (более сотни подобных комментариев):
Что делать, если не хочется просматривать сотни комментариев и отбирать из них человеческие?
Есть множество способов, позволяющих решить эту проблему:
- Убрать блок комментариев WordPress и поставить другой (зависеть от других сервисов не хорошо)
- Поставить капчу (Большая вероятность того, что пользователь ошибется или ему будет лень. Это снизит количество комментариев на блоге раз в 5 минимум)
- Поставить, какой-нибудь Анти-Спам плагин (не все сообщения будут фильтроваться по правилу)
- Добавить галочку «Я не бот» (некоторые люди могут её не заметить)
- Поменять значения ID полей
Как поменять значения ID полей?
Данный способ заключается в том, что мы делаем стандартное поле комментариев ‘comment’ не видимым для человека и подсовываем вместо него другое поле.
Для гостей сайта, желающих оставить комментарий, это ничего не изменит, так как они будут писать в новом поле.
Поскольку скрипт бота не понимает, что человек не может записать значения в поле, которое он не видит.
Ему можно сделать выговор — запретить опубликовывать его комментарий на блоге.
Что нужно сделать?
Зайдите в папку с вашим сайтом. Далее перейдите в папки «wp-content» -> «themes» -> название вашей текущей темы.
1 шаг: Добавление нового поля и скрытие старого
Откройте файл «comments.php» Найдите место, где на экран выводится поле с текстом комментария. В большинстве случаях эта строка выглядит так:
В случае, если подобная строка была найдена, то замените её на:
Далее, откройте «style.css» и в конце его допишите
.smo {display: none;}
Иначе (если подобной строки нет):
Откройте файл «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'] .=
'';
return $default;
}
Затем, откройте файл «functions.php » и допишите в конце:
.comment-form-comment {display: none;}
Результат: У нас теперь есть поле «AndHacker_comment» и стандартное «comment» — невидимое, в которое пользователь ничего ввести не сможет.
2 шаг: определяем спам
Откройте файл «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('Скоро надоедливых спамеров начнут наказывать на уровне закона! ©AndHacker');
$comment_content = trim($_POST['AndHacker_comment']);
$_POST['comment'] = $comment_content;
return $commentdata;
}
Проверка работы
Всё, теперь проверяем — добавьте комментарий к любой статье. Работает?
А что, если это будет бот? Можете проверить — временно закомментируйте «/*» и «*/» всё, что мы дописали в «style.css».
Будет 2 поля с комментариями. Если написать что-либо в «comment», то комментарий добавляться не будет и отобразится следующая надпись:
«Скоро надоедливых спамеров начнут наказывать на уровне закона! ©AndHacker»
Что можно улучшить:
- Придумать свои индивидуальный ID(Сочетание символов). Заменить им «AndHacker_comment». Это повысит безопасность.
- Заменить надпись, которая будет отображаться при отправке спама на более дружелюбную, например: «да пошел ты …(закрыто цензурой)»
P.S А можно даже вставить шикарный стих с посланием (цензура):
Ух, защищать нужно обязательно!
Да, Вы совершенно правы.