Столкнулся недавно с довольно простой, но нестандартной задачей. Было необходимо заблокировать отправку комментариев на сайте на WordPress в случае наличия в поле «Сайт» одного из слов по заранее известному списку.
Дело в том, что один из моих проектов повадился атаковать спам-бот, значительная часть комментариев которого пробивала фильтры Akismet’а и уходила на премодерацию. Отличительным признаком данного бота являлось то, что он не мог пройти мимо поля «Сайт» в форме для комментариев и всегда пытался заполнить его каким-то текстом вроде «Сайт не в работе», «Сайт отсутствует», «Сайта нет».
Решение лежало на поверхности — собрать используемые ботом текстовки и добавить проверку на их наличие в соответствующем поле перед публикацией комментария. В случае совпадения — выводить сообщение об ошибке.
Привожу пример кода, который реализует данную проверку:
add_filter( 'pre_comment_on_post', 'verify_site_field' ); function verify_site_field( $commentdata ) { if ($_POST['url'] == 'Отсутствует' || $_POST['url'] == 'Сайта пока нет' || $_POST['url'] == 'Сайт не в работе' || $_POST['url'] == 'Сайт отсутствует' || $_POST['url'] == 'Сайта нет' || $_POST['url'] == 'Нет' || $_POST['url'] == 'Сайт отсуствует') { wp_die( 'Антиспам-защита детектировала в вас назойливого спам-бота. <br> Подумайте над тем, как вы заполняете поле "Сайт"!' ); } }
Данный код нужно разместить в файле functions.php используемой темы WordPress. Тексты надо заменить на свои. При необходимости можно добавлять новые условия для фильтрации через знак || (условие ИЛИ на языке PHP).