Защита от спама в WordPress – рано или поздно все блогеры задаются этим вопросом. Есть разные способы борьбы со спамом.Самый простой, но не самый лучший способ это установить палагин.
Вот парочка самых популярных:
Вместо этого я просто сделал эту защиту от спаса вручную – способ очень простой.
Способ заключается в том, что мы скрываем стандартное поле для ввода комментария ‘comment‘ и заменяем его на новое созданное поле ‘real-comment‘. Для посетителей все останется без изменений они и не заметят разницы, а вот спам-скрипты при попытке заполнить стандартное поле с именем ‘comment‘ будут попадать на фильтр запрещающий им комментировать.
[spoiler name=”Необходимые данныеДля открытия – нажмите“]
1. Проверка на спам.
Начнем мы с добавления фильтра спама, у нас в форме комментария будет 2 поля. Одно скрытое – это стандартная форма ‘comment‘ и второе поле – это новое созданное нами поле. Добавляем функцию которая будет определять, если поле было заполнено комментатором – это видимое в шаблоне, то комментарий пропускается, а если скрытое, то публикация запрещается.
Для этого вставим такой код в functions.php:
[crayon lang=’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;
}
[/crayon]
2. Добавляем в шаблон новое поле для ввода комментария.
Существует два варианта как это можно сделать:
1. Если у Вы используете вывод формы комментария не через функцию comment_form() (полностью заменяет форму комментария). В этом случае редактируем файл comments.php шаблона, находим там что-то похожее на данный код:
[crayon lang=’html’]
[/crayon]и заменяем его на код:[crayon lang=’html’]
[/crayon]
2. Второй вариант, если в шаблоне для вывода формы комментариев Вы используете функцию comment_form(). Для добавления нового поля откройте файл шаблона functions.php и добавьте туда код:
[crayon lang=’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;
}
[/crayon]
На этом все, готово. У нас есть видимое поле для ввода комментария ‘real-comment‘ (можно использовать любое имя), а стандартное ‘comment‘ поле скрытое от посетителей. И есть функция которая фильтрует эти поля. Больше автоматический спам вас не побеспокоит.
Проверить работу защиты от спама можно
[/spoiler]
Не забываем оставлять свои комментарии без спама : )
50 комментариев
Статья отличная. Сама этим вопросом занималась недавно, так как “Akismet” мне жутко не нравился, перепробовала много других плагинов и остановилась на “Antispam Bee”.
Мне у этого плагина сама идея понравилась: невидимое для пользователя поле-ловушка, которое заполняют боты, потому что действуют на уровне кода, да плюс еще идет проверка: из браузера ли заполнялась форма или нет, а так же сверяется IP комментатора и блога. И никаких капчей, утомительных для читателя.
Но плагин есть плагин. Стараюсь их поменьше использовать и там где можно заменить кодом.
Так что автору статьи ОГРОМНОЕ СПАСИБО! Прекрасная альтернатива “Antispam Bee” Изящное и легкое решение.
Да и вообще отличный сайт, столько полезной информации. Добавила в закладки.
Автору респект!!!
Спасибо Вам за отзыв! Стараемся делать сайт лучше. Так что все еще впереди. 😛
Кстати отличное и простое решение для сайтов на wordpress, сам замучился был со спамом, но оказывается, что можно обойтись и без плагинов.
Также использую эти два плагина на своем блоге, но вот от Akismeta хочу отказаться. Толку я считаю нет никакого от такого плагина, за которым все перепроверять приходится. Не для кого не секрет, что данный антиспам заносит в базу все подряд, как голодный монстр.
Советую использовать данную функцию и надежнее и свой блог облегчите от плагинов.
Отличная статья , она мне как раз и была нужна.
Спам наваливал на мой блог БЕСКОНЕЧНО.Но благодаря этому видео все обошлось , хоть и мучался 2 месяца. Нужно срочно скинуть этот сайт своим друзьям. Еще раз огромное спасибо за эту статью. Все было понятно и интересно.
Рад, что вам помог Артём. А что решили поделиться с друзьями сайтом очень благодарен. Ведь чем больше он будет востребован, тем больше будет мотивации создавать новые видеоуроки и заметки.
Действительно, способ простой и эффективный, а самое главное, что он доступен для всех желающих защитить себя от спама!
Да метод хорошо и проверен временем. Советую всем!
Я не сильна в php, поэтому вопрос: как именно указанная функция фильтрует поля?
Нет ли возможности спамерам добавлять свой комментарий прям в базу?
Кстати, форма проверки мне выдала надпись:
“Forbidden
You don’t have permission to access /wp-comments-post.php on this server.”
Понятн – это значит, что спамер не пройдет.
Но почему такая надпись, а не та, которую указали вы?
или это связано с настройками хостинга?
Игорь, подскажите, как узнать, какая функция используется для вывода комментариев. Ясно, что надо смотреть в comments.php, а что смотреть?
За вывод комментариев отвечает функция wp_list_comments . Именно ее значение и надо искать в comments.php.
Игорь, а может быть такое, что функция вывода комментария выглядит по-другому? Или я – уже такой непробываемый “чайник”, что не могу найти wp_list_comments? Вдоль и поперек излазила и comments.php, и functions.php.
Наугад сделала у себя первый предложенный вами вариант. Впервые спама нет, но нет и других комментариев.
Не совсем понял зачем вы ищете функцию для вывода комментариев, может вам нужна функция для вывода формы комментариев. Это разные вещи.
Игорь! Вы написали:”Добавляем в шаблон новое поле для ввода комментария. Существует два варианта как это можно сделать: 1. Если у Вы используете вывод формы комментария не через функцию comment_form()… 2. Второй вариант,если в шаблоне для вывода комментариев Вы используете функцию comment_form()”. Вот я и хочу узнать, какая функция используется у меня.
Галина, как бы вам так ответить что бы Вы поняли. В уроке все описано что надо искать. Сначала посмотрите файл comments.php, что в нем искать написано в 1-ом варианте. Если это вариант Вам не подошел далее следует посмотреть файл functions.php, что ищем в нем написано в 2-ом варианте.
Галина, может быть Вам мой опыт поможет. В первый момент я подумала так же, как и Вы, что понятия не имею какой у меня там вывод формы через функцию или нет. Поэтому попробовала сначала второй вариант и добавила в шаблон функцию, т.е. просто скопировала туда код. Эффект был не совсем нужный: на простые комментарии тоже «спаму нет!» выдавало. Тогда в файле comments.php я поискала такую строчку и не нашла.
Но посмотрев внимательней нашла вот такую:
Т.е. нужно найти все, что между открывающим и закрывающим тегом textarea, как я понимаю. Я заменила все это на
Но тоже ничего не заработало у меня. Тогда я внимательно пригляделась, чем отличается моя строчка, которую предположительно нужно было заменить и строчка Игоря, и заменила вот так:
Т.е. у меня вот class= не было а cols=”45″ rows=”8″ aria-required=”true было. Короче говоря, я совсем не уверена была, что правильно делаю, но в итоге у меня, кажется всё заработало. За что еще раз Игорю сердечная благодарность.
ой. примеры строчек почему-то не показывает тут, но вроде как, и так должна быть понятна логика 😳
что бы работал отображался код надо использовать кнопку Код
вообще-то рано обрадовалась, “спаму нет” и на мои простые коменты выдает. что-то не так делаю
Кажется получилось! Нашла все отличия Вашей строки и моей и заменила в соответствии с ними. По крайней мере мои комментарии на сайт проходят, а на проверочной странице пишет “спаму нет”. Поглядим как будет действовать на спамеров. Вот теперь действительно большое спасибо!
🙂 плагины все доверчиво отключила, жду чего будет 🙂
За пару дней убедилась, всё работает как нельзя лучше. Чудо чудесное! Аж не верится. Еще раз примите сердечную благодарность!
Рад, что смог Вам помочь.
Игорь, спасибо огромное за решение проблемы! На моем сайте стоял Akismet, но в последнее время он начал пропускать огромные по тексту комментарии, была сильная нагрузка на хостинг. Здорово, что можно обойтись без плагинов!
Пробовал ставить, проверка работает, но и на все остальные нормальные комменты тоже пишет Спаму нет. В чем может быть проблема?
Я уже точно не помню у меня тоже такой косяк был. Это значит, что вы не правильно сделали. Исправить можно почитав внимательно инструкцию и сделать все сначала.
Вот это супер темка. Возможность избавиться от спама в виде такого небольшого кода – здорово! У меня сделано по-другому и тоже без плагинов, но при обновлении WP надо все поправлять, а ваш код гораздо лучше получается. Главное все внимательно сделать, чтоб и хорошие комменты не попали под цензуру 😉
А как эта функция отличает спам это или нормальный коммент?
Если Вы почитаете статью там все написано.
А у меня после ввода руками комментария выдает ошибку. Пишет :
Читайте внимательнее инструкцию, все должно работать.
У меня нет такой строчки <textarea… в comments.php
в статье описано 2 варианта вывода комментариев. попробуйте другой.
Спасибо Игорь. Однозначно страницу в закладки. Я так понимаю что даже при обновлении WordPress не понадобится делать никакие изменения, потому как все было сделано в файлах шаблона?
Да, Вы правы с обновлением все останется.
Игорь, а я только успела поставить первый код в functions.php и пропала моя админка. Зашла в этот файл через файлзиллу, чтобы код удалить, а его там и нет. Со вчерашнего вечера мой хостинг не может вернуть мне админку. Как вы думаете, почему это произошло?
Игорь, у меня всё получилось. Спасибо большое!
Нет, ерунда какая-то… Смайлы перестали работать и мои ответы на комментарии считает спамом. Это только у меня так или ещё кто столкнулся с такой проблемой? А идея – классная! Супер просто!
У меня тоже смайлы не работают 😥
Игорь, здравствуйте!
Помогите, пожалуйста, “чайнику”. По 1 пункту все получилось отлично – “спаму нет!” пишет. Но по второму пункту (использовала 2-ой вариант)у меня получается два окошка для комментариев. Один, как я понимаю, должен быть скрыт. Но как это сделать я не понимаю.
Светлана попробуйте тогда первый вариант. Если не получится, то вам надо для ненужного поля для ввода текста присвоить свойства css
Игорь, здравствуйте!
Ничего не получается. По первому варианту не могу найти что-то похожее на . Неужели я неисправимый “чайник” 😥 ?
А в каком файле надо присвоить свойства css?
Светлана, в каждом блоге все делается по разному. Так что общих советов дать не могу.
Спасибо, Игорь!
Думаю, что придется оставить плагин.
Сегодня опять и так, и этак, но ничего не получается.
Всего Вам хорошего. У Вас очень замечательный блог, я еще не раз сюда вернусь.
Игорь, здравствуйте. Я купила тему Вордпресс у Ксаны и в описании к теме написано, что метод защиты от спама использован Ваш. Работает просто супер, спасибо. За неделю, что стоит у меня тема, ни одного спам комментария не проскочило, хотя раньше, хоть у меня и стоял плагин доходило до 150 спама за два дня.
Один вопрос: смайлики он воспринимать не хочет. Пишет «Спаму нет!». Можно ли это как то исправить?
Ольга, здравствуйте!
Даже не знаю почему у Вас так, у меня на этом сайте давно и всё работает 😉
Видать что-то где-то конфликтует.
Вот понять бы что((
Большое вам человеческое спасибо!
Проверила работу защиты от спама – все получилось, но к сожалению, так же перестали работать смайлы, пришлось удалять, жаль.