Наиболее простым способом защита от спама в формах Contact form 7 это использование скрытого инвертированного чекбокса.
Логика работы галочки довольно проста — форма отправляется только если галочка снята, при этом дефолтное состояние галочки — checked.
То есть если заходит робот он проверяет состояние галочки смотрит что она выставлена и думаю что все ок и отправляет форму, но форма не отправляется так как нужно чтобы было наоборот.
Если же заходит реальный пользователь то через браузер выполняется скрипт JS и галочка снимается. И форма будет работать-отправлять сообщения.
Реализация:
1. Создаем в Contact Form 7 чекбокс
[acceptance agree class:agree default:on invert]
acceptance — собственно сам чекбокс
default:on — по умолчанию checked
class:agree — class=»agree»
invert — отправлять форму только если checked снят
2. Убираем чекбоксу видимость через CSS
.agree {display:none}
3. Снимаем галочку через jQuery
<script language="javascript">
jQuery('.agree').prop('checked', false);
</script>
или на нативном JS
<script language="javascript">
var x = document.getElementsByClassName("agree");
var i;
for (i = 0; i < x.length; i++) {
x[i].checked = false;
}
</script>
Скрипт нужно поместить ниже чем чекбокс, и лучше всего обернуть его document.ready.
Это собственно и всё. Защитить Contact Form 7 от спама как видите — несложно, сложнее было придумать логику, а делов по реализации — на 15 минут.