Contact Form 7: как запретить отправку формы без согласия на обработку данных

Если форма Contact Form 7 уже собирает заявки, но в ней нет явного согласия на обработку персональных данных, это не просто вопрос удобства. На практике чаще всего нужно, чтобы отправка блокировалась до тех пор, пока пользователь не поставит галочку. Причём не «спрятать текст внизу», а именно не дать форме уйти без согласия.

Ниже — рабочий вариант для типовой формы CF7: добавляем чекбокс согласия, делаем его обязательным, а при необходимости усиливаем проверку через хук, чтобы не полагаться только на разметку.

Когда проблема проявляется

Сценарий обычно один и тот же: форма выглядит нормально, письма приходят, но юридически важный чекбокс либо не обязателен, либо его можно обойти. Иногда поле есть, но пользователь отправляет форму через автозаполнение, старый шаблон или кастомный скрипт, а сервер это не проверяет.

Если у вас уже были случаи, когда заявки уходили без согласия, смотреть нужно не только на форму, но и на серверную валидацию. HTML-атрибут required полезен, но сам по себе не должен быть единственной защитой.

Диагностика: что проверить до правки

  • Есть ли в форме отдельное поле согласия, а не просто текст рядом с кнопкой.
  • Помечено ли оно как обязательное в шорткоде Contact Form 7.
  • Не отключает ли тема или плагин стандартную валидацию JavaScript.
  • Нет ли кастомного отправщика формы, который обходит обычную логику CF7.
  • Не подменяется ли шаблон формы в дочерней теме или через фильтры.

Если форма работает на нескольких языках или в нескольких шаблонах, проверьте каждый вариант отдельно. Часто проблема сидит не в самом плагине, а в копии формы, которую забыли обновить.

Пошаговое решение

1. Добавьте обязательный чекбокс в форму

В редакторе Contact Form 7 используйте стандартное поле acceptance. Оно как раз и предназначено для согласия, которое должно быть подтверждено перед отправкой.

[acceptance consent] Я даю согласие на обработку персональных данных и принимаю политику конфиденциальности [/acceptance]

Если нужен более явный текст, можно добавить ссылку на политику прямо в подпись. Главное — не прятать смысл согласия в длинном абзаце мелким шрифтом.

2. Сделайте согласие обязательным на уровне формы

Поле [acceptance] в CF7 по умолчанию блокирует отправку, если галочка не отмечена. Это базовый и правильный способ. Не заменяйте его обычным checkbox, если вам нужна именно блокировка отправки до согласия.

Пример формы:

[text* your-name placeholder "Ваше имя" ]
[email* your-email placeholder "E-mail"]
[textarea your-message placeholder "Сообщение"]
[acceptance consent] Я согласен на обработку персональных данных и с политикой конфиденциальности [/acceptance]
[submit "Отправить"]

3. Усильте проверку на сервере, если форма кастомная

Если у вас есть подозрение, что фронтенд-валидацию можно обойти, добавьте серверную проверку через хук wpcf7_validate_acceptance*. Это уже не про внешний вид, а про контроль на стороне WordPress.

add_filter( 'wpcf7_validate_acceptance*', 'cf7_require_consent', 20, 2 );
function cf7_require_consent( $result, $tag ) {
	$name = $tag->name;

	if ( 'consent' !== $name ) {
		return $result;
	}

	if ( empty( $_POST[ $name ] ) ) {
		$result->invalidate( $tag, 'Нужно согласие на обработку персональных данных.' );
	}

	return $result;
}

Этот код имеет смысл, если у вас нестандартная сборка формы, кастомный JS или несколько точек входа. Для обычной формы часто достаточно штатного acceptance-поля, но серверная проверка делает поведение предсказуемее.

Если нужно сравнить подходы

ПодходЧто даётМинус
Только [acceptance]Быстрое штатное решение без кодаЗависит от корректной работы формы и шаблона
[acceptance] + серверный хукБлокировка на фронтенде и на сервереНужно поддерживать код в теме или плагине
Обычный checkbox без проверкиВизуально похоже на согласиеЛегко обойти, не лучший вариант для обязательного согласия

Как проверить, что всё работает

После правки не ограничивайтесь одним тестом из админки. Проверьте форму в реальном браузере и в режиме инкогнито.

  • Откройте страницу с формой.
  • Не отмечайте чекбокс согласия и попробуйте отправить форму.
  • Убедитесь, что отправка блокируется и появляется понятное сообщение.
  • Отметьте чекбокс и повторите отправку.
  • Проверьте, что письмо приходит, а данные формы не теряются.
  • Если есть кэш страницы, очистите его и повторите тест.

Если форма отправляется без согласия, значит проблема либо в шаблоне, либо в кастомном JS, либо в том, что используется не acceptance, а обычный checkbox без серверной проверки.

Частые ошибки и как их исправить

Чекбокс есть, но отправка всё равно проходит

Обычно это происходит, когда вместо acceptance используется обычное поле [checkbox]. Для согласия на обработку данных нужен именно acceptance, потому что он встроенно связан с логикой блокировки отправки.

Сообщение об ошибке есть, но пользователь его не видит

Так бывает, если тема скрывает вывод ошибок CF7 стилями или скриптами. Проверьте DOM после отправки: сообщение может быть в разметке, но перекрыто CSS. Иногда достаточно вернуть стандартные стили плагина или убрать конфликтующий класс.

Форма валидируется в браузере, но обходится через API

Это типичный случай для кастомных интеграций. Если форма отправляется не стандартным способом, фронтенд-проверка не спасает. В таком сценарии нужна серверная валидация через хук, а не только визуальный чекбокс.

Согласие есть, но текст политики не открывается

Проверьте ссылку в тексте поля и убедитесь, что она не ломается из-за кавычек, HTML-экранирования или фильтрации контента в редакторе. Лучше использовать обычный полный URL или аккуратно вставленный тег <a>.

Практические советы по безопасности и производительности

Не храните код проверки согласия в случайном сниппете без контроля версий. Если правка нужна надолго, вынесите её в дочернюю тему или небольшой mu-plugin. Так проще понять, что именно отвечает за валидацию, и не потерять код после обновления темы.

Если на сайте много форм, не дублируйте один и тот же код в нескольких местах. Лучше сделать одну общую функцию и проверять имя поля или ID формы. Это уменьшает риск расхождений между шаблонами.

Для сайтов с плотной обвязкой из плагинов полезно отдельно проверить, не вмешивается ли оптимизатор в скрипты Contact Form 7. После минификации и отложенной загрузки JS форма может вести себя нестабильно, и это легко принять за ошибку валидации.

Что делать, если нужна не только валидация, но и чистка лишнего кода

Если вы параллельно убираете дубли, лишние стили и скрипты на сайте, удобно смотреть не только на форму, но и на общий технический мусор. В таких задачах часто помогает аккуратная чистка фронтенда и отключение лишнего функционала через инструменты вроде Clearfy Pro: https://wpshop.ru/plugins/clearfy?utm_source=contactform7.ru&utm_medium=article&utm_campaign=contact-form-7-zapretit-otpravljat-formu-bez-soglasiya-na-obrabotku-dannyh

Но даже если вы используете подобный плагин, правило остаётся прежним: согласие должно проверяться там, где его нельзя обойти — на стороне формы и, при необходимости, на стороне сервера.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Contact Form 7: как запретить отправку формы без согласия на обработку данных
31.08.2026
Contact Form 7: загрузка файлов не приходит во вложении
28.08.2026
Как запретить отправку Contact Form 7 на один и тот же email дважды
03.09.2026
Contact Form 7 дублирует отправку и создаёт два сообщения: как найти причину и исправить
19.08.2026
Contact Form 7 не отправляет письма: как убрать спам и настроить SMTP
22.08.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше