О сути метода я рассказываю здесь — Бегство от спама.
Для работы понадобится 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; //не меняем статус сообщения } ?> | 
Не плохой, на мой взгляд, метод, ибо кепча уже надоела. Подход, правда, не верен по своей сути — цель спамера : добавить ссылку. Вот на этом и надо сосредоточиться, но это уже тема для другой статьи.
