О сути метода я рассказываю здесь — Бегство от спама.
Для работы понадобится hook на новые комментарии — pre_comment_approved, который мы объявим в файле темы — function.php. Если в вашей теме нет такого файла — создайте :). Нужно модифицировать всего два файла в папке темы.
comments.php — добавим в тег формы атрибут — onsubmit и скрытое поле.
1 2 |
<form ... onsubmit="this.hidfield.value='success'"> <input type="hidden" name="hidfield" value=""> |
functions.php — добавим фильтр pre_comment_approved. Долго подбирал к чему бы прицепиться. В Drupal, к примеру, к любой форме прицепиться можно программно, form api все-таки, а тут с этим делом туго. Пройдя по цепочке обработки комментариев в WordPress — я дошел до того момента, где определялся статус комментария. И тут меня осенило — мы сразу будем помечать спам как «spam».
Было важно, чтобы зацепка срабатывала только при отправке данных формы. Она ведь может быть вызвана где угодно. Для этого я добавил условие, что обязательно должны передаваться данные $_POST[‘comment’], т.е. производится отправка данных формы комментария.
1 2 3 4 5 6 7 8 9 10 |
<php add_filter('pre_comment_approved', 'pre_comment_hook'); function pre_comment_hook(&$approved) { if (!empty($_POST['comment'])) { if ($_POST['hidfield'] != 'success') return 'spam'; //определили, что это спам } return $approved; //не меняем статус сообщения } ?> |
Не плохой, на мой взгляд, метод, ибо кепча уже надоела. Подход, правда, не верен по своей сути — цель спамера : добавить ссылку. Вот на этом и надо сосредоточиться, но это уже тема для другой статьи.