Таки здравствуй, дражайший читатель.
Сегодня речь пойдёт о такой неприятнейшей вещи как спам в wordpress. Таки да, дрянь это премерзкая и отвратительная. И, что любопытно, практически непобедимая. Да, постоянно изобретаются новые плагины. И спам-боты постоянно совершенствуются, обходя их функционал. В результате спам-бот пробивает защиту, и плагин превращается в груду бесполезного программного кода. Даже могучий Akismet — хвала ему во веки веков — и тот пропускает спамные комментарии, ну либо наоборот, сливает в спам вполне годные. Так что — практика показывает, единственное приемлемое решение, это уникальная собственная реализация защиты от спама. Но — это доступно только программистам, или хотя бы более-менее понимающим основы PHP. Потому как потребуется вносить изменения непосредственно в движок.
Итак, самый простой способ одолеть спам, это переименовать поля формы комментариев совместно с правками в скрипт получения этих самых комментариев. Причем, лично я его опробовал на себе, и могу сказать, что за последние недели две спама в каментах у меня не было, хотя до того — по 15 спамных каментов ежедневно приходило минимум. Всё дело в том, что движок WordPress имеет стандартные имена полей форм. Например в форме комментариев — само текстовое поле называется (id & name) comment. Назовите его как-нибудь вроде comment_anti_spam с соотвествующими правками в файле wp-comments-post.php, который лежит рядом с вашим index.php, и всё — спам-боты будут атаковать поле comment, но не попадут в базу, очередь модерации, и, соответственно, на сайт. При этом само поле comment надо оставить, и заодно проверять ещё и его, заполнено или нет. Дело в том, что это поле скрыто на странице средствами CSS, и живой человек увидеть его не сможет. А роботу всё равно. Итак, допустим, мы решили — делаем так. Что для этого требуется предпринять? Во-первых, отредактировать файл /wp-content/themes/<имя вашей темы>/style.css, добавив в её конец следующий класс:
.invisible { display:none; }
Этот класс, к слову, универсален — он позволяет оставить тот или иной элемент непосредственно в коде, но при этом вообще не выводить его на странице.
Затем, редактируем файл /wp-content/themes/<имя вашей темы>/comments.php:
<input class="invisible" type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" /> <input class="comment" type="text" name="author_anti_spam" id="asp_author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
По большому счёту, мы просто дублируем поле, одному прописываем класс invisible (тому, которое оригинальное), а другому оставляем класс comment. И переименовываем видимое поле. После чего лезем в корень сайта, и там находим файл wp-comments-post.php, в котором меняем следующее:
$comment_author_spam = ( isset($_POST['author']) ) ? trim(strip_tags($_POST['author'])) : null; $comment_author_email_spam = ( isset($_POST['email']) ) ? trim($_POST['email']) : null; $comment_author_url_spam = ( isset($_POST['url']) ) ? trim($_POST['url']) : null; $comment_content_spam = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null; if ( !empty($comment_author_spam) || !empty($comment_author_email_spam) || !empty($comment_author_url_spam) || !empty($comment_content_spam) ) { die('Ай ай ай. Спамить не есть гут!'); exit; } $comment_author = ( isset($_POST['author_anti_spam']) ) ? trim(strip_tags($_POST['asp_author'])) : null; $comment_author_email = ( isset($_POST['email_anti_spam']) ) ? trim($_POST['asp_email']) : null; $comment_author_url = ( isset($_POST['url_anti_spam']) ) ? trim($_POST['asp_url']) : null; $comment_content = ( isset($_POST['comment_anti_spam']) ) ? trim($_POST['asp_comment']) : null;
Тащемта, после этого всё будет работать как часы. Если только у вас не очень высокопосещаемый блог, и спамеры не будут править алгоритм конкретно под вас. Кстати в следующей статье на эту тему есть планы описать принципы борьбы со спамом в wordpress, и почему плагины предназначенные для такой борьбы — рано или поздно вырождаются, т.е. начинают пропускать спам на сайт.
Пытаюсь применить ваш метод борьбы со спамом, только вот не понимаю про изменения в файле wp-comments-post.php
вот эта часть у меня в файле есть
$comment_author = ( isset($_POST[‘author_anti_spam’]) ) ?
trim(strip_tags($_POST[‘asp_author’])) : null;
$comment_author_email = ( isset($_POST[’email_anti_spam’]) ) ? trim($_POST[‘asp_email’]) : null;
$comment_author_url = ( isset($_POST[‘url_anti_spam’]) ) ? trim($_POST[‘asp_url’]) : null;
$comment_content = ( isset($_POST[‘comment_anti_spam’]) ) ? trim($_POST[‘asp_comment’]) : null;
я ее подправила, а вот то что у вас до этого написано у меня в файле нет, я эту часть добавила, но не уверена, что сделала правильно, т.к. у вас написано «меняем следующее», а не добавляем.
Поясните, пожалуйста, как сделать это правильно?
А вы просто в файле темы должны это сделать. Там смотря как тема называется, поэтому и дан путь /wp-content/themes/< имя вашей темы>/comments.php
Впрочем, лично я бы посоветовал не морочиться так, а сделать проще — поставить плагин от KeyCaptcha — вот та капча, которую вы наверняка заполняли, чтобы оставить комментарий. Через неё спам вообще не проходит — по крайней мере за все время её функционирования никакого спама не было.http://keycaptcha.com/ их сайт, а сам плагин ищите в WP по ключевому слову keycaptcha.
Про изменения в файле /wp-content/themes//comments.php понятно, далее не понятно, а там речь про корень сайта, ну да ладно.
Капчу я ненавижу, поэтому категорически «нет», тем более такого размера окно с дурацким заданием раскладывать картинки, я не для тинейджеров пишу, моему блогу такое не подходит.
Но.. благодаря вашему совету поискать что-то другое, в итоге поставила плагин WP-SpamFree (очень хорошие отзывы про него), надеюсь он не подведет.
Боитесь, что пользователи не поймут, что делать с капчей? :) Ну вот судя по демографии посетителей — у меня почти нет ни слишком молодых (менее 25), ни слишком старых (более 60) читателей — но разбираются же. Это зато очень здорово экономит нервы админу. Во-первых, нет спама, а во-вторых резко сокращается количество идиотов в комментариях. Например многие из них уходят, так и не сумев сложить «точно» картинку, но при этом не поняв, что точно складывать вовсе не обязательно.
В принципе сейчас просто очень много всего, чтобы с этой напастью бороться. У меня вот к примеру совместно работают Akismet + KeyCAPTCHA. Первый отсекает известных ботов путем сравнения с базой Akismet, а второй отсекает ботнеты, которые таки проскочили.