В квизах обязательные поля нужны не ради формальности. Если вы собираете лиды, то без имени, телефона или email результат часто превращается в бесполезную заявку. Но если включить обязательность слишком грубо, квиз начинает сбоить: кнопка не работает, форма не отправляется, а пользователь не понимает, что именно нужно исправить.
Ниже разберём рабочую схему: как определить, где именно ломается валидация, как настроить обязательные поля в плагине квизов, что делать, если у плагина нет нужной опции, и как проверить, что всё действительно работает.
Когда проблема не в поле, а в логике шага
Сначала стоит понять, что именно вы пытаетесь исправить. В квизах WordPress обязательность может реализовываться по-разному: на уровне отдельного поля, на уровне шага, на уровне финальной формы или через кастомный код. Из-за этого одна и та же ошибка выглядит по-разному.
Типичные симптомы
- кнопка «Далее» активна, но шаг не переключается;
- форма отправляется без email или телефона;
- ошибка подсвечивается, но текст не объясняет, что не так;
- после обновления плагина обязательные поля перестали проверяться;
- валидация работает на десктопе, но не срабатывает на мобильных.
Если проблема проявляется только на одном устройстве, сначала смотрите JS-ошибки и конфликт скриптов. Если поле игнорируется всегда, чаще всего дело в настройке самого квиза или в том, что поле визуально обязательное, но не отмечено как required на сервере.
Как настроить обязательные поля в конструкторе квиза
В большинстве плагинов квизов логика похожа: у поля есть тип, подпись и флаг обязательности. Ищите в настройках поля параметры вроде Required, Mandatory, Обязательное или отдельную галочку для проверки перед переходом к следующему шагу.
Практически это выглядит так:
- откройте шаг с формой или контактным блоком;
- выберите поле, которое должно быть обязательным;
- включите проверку перед отправкой или переходом дальше;
- задайте понятный текст ошибки;
- сохраните квиз и проверьте его в приватном окне.
Если плагин позволяет задавать условную логику, не делайте обязательными все поля подряд. В квизах это часто ухудшает конверсию. Лучше оставить обязательными только те поля, которые реально нужны для обработки заявки.
Что обязательно проверять в настройках
- есть ли отдельная валидация для email и телефона;
- не отключена ли отправка формы без заполнения скрытых полей;
- не конфликтует ли обязательность с условными шагами;
- не дублируется ли одно и то же поле на нескольких шагах;
- не перезаписывает ли тема стили ошибок и состояние
invalid.
Если в плагине нет нужной опции: добавляем проверку кодом
Иногда плагин квиза не умеет делать поле обязательным в нужном месте, либо проверка есть только на финальном шаге. Тогда проще добавить серверную валидацию через хук WordPress. Это особенно полезно, если квиз отправляет данные через обычную форму или через AJAX, но в обработчике есть точка расширения.
Ниже пример для обычной формы WordPress с проверкой на стороне PHP. Он не привязан к конкретному плагину квизов, но показывает принцип: перед сохранением или отправкой заявки проверяем обязательные поля и возвращаем ошибку, если данных нет.
<?php
add_filter('wp_handle_upload_prefilter', function ($file) {
return $file;
});
add_action('admin_post_nopriv_my_quiz_submit', 'my_quiz_submit_handler');
add_action('admin_post_my_quiz_submit', 'my_quiz_submit_handler');
function my_quiz_submit_handler() {
$name = isset($_POST['quiz_name']) ? sanitize_text_field(wp_unslash($_POST['quiz_name'])) : '';
$email = isset($_POST['quiz_email']) ? sanitize_email(wp_unslash($_POST['quiz_email'])) : '';
if ($name === '') {
wp_die('Поле имени обязательно для заполнения.');
}
if ($email === '' || !is_email($email)) {
wp_die('Укажите корректный email.');
}
// Здесь можно сохранить заявку, отправить письмо или передать данные в CRM.
wp_safe_redirect(home_url('/thanks/'));
exit;
}
Если квиз работает через AJAX, логика та же, но вместо wp_die() лучше возвращать JSON с ошибкой. Важно не полагаться только на фронтенд-валидацию: пользователь может отключить JavaScript, а скрипт может не загрузиться из-за конфликта.
<?php
add_action('wp_ajax_nopriv_my_quiz_validate', 'my_quiz_validate');
add_action('wp_ajax_my_quiz_validate', 'my_quiz_validate');
function my_quiz_validate() {
$phone = isset($_POST['quiz_phone']) ? preg_replace('/[^0-9+]/', '', wp_unslash($_POST['quiz_phone'])) : '';
if ($phone === '') {
wp_send_json_error([
'message' => 'Телефон обязателен.'
]);
}
wp_send_json_success([
'message' => 'OK'
]);
}
Сравнение подходов: плагин, код или гибрид
Если задача простая, достаточно настроек плагина. Если нужна строгая валидация и интеграция с CRM, лучше добавить серверную проверку. На практике часто работает гибрид: обязательность на фронтенде для удобства пользователя и проверка на сервере для защиты от пустых заявок.
| Подход | Когда подходит | Плюсы | Минусы |
|---|---|---|---|
| Настройки плагина | Обычный квиз с 1–3 полями | Быстро, без кода | Зависит от возможностей плагина |
| Код в теме или мини-плагине | Нужна точная логика проверки | Контроль над валидацией | Нужно тестировать после обновлений |
| Гибрид | Лиды, CRM, сложные шаги | Удобно пользователю и надёжно на сервере | Чуть больше настройки |
Как проверить, что обязательные поля работают
Проверка должна быть не «на глаз», а по сценарию. Иначе легко пропустить ситуацию, когда поле подсвечивается, но форма всё равно уходит пустой.
Чек-лист проверки
- открыть квиз в приватном окне без авторизации;
- не заполнять обязательное поле и нажать «Далее» или «Отправить»;
- убедиться, что форма не отправилась;
- проверить, что текст ошибки понятен и виден рядом с полем;
- заполнить поле корректно и повторить отправку;
- посмотреть, ушли ли данные в CRM, почту или таблицу заявок;
- проверить мобильную версию и Safari/Chrome, если аудитория смешанная.
Если у вас есть доступ к логам сервера, полезно посмотреть, не приходит ли пустое значение на обработчик. Это помогает отличить проблему фронтенда от ошибки в PHP-обработке.
Частые ошибки и как их исправить
Поле отмечено как обязательное только визуально
Иногда разработчик добавляет звёздочку рядом с подписью, но не включает реальную проверку. Пользователь видит «обязательное» поле, а форма всё равно отправляется пустой. Исправление простое: проверьте, есть ли у поля настоящий атрибут required или серверная валидация.
Ошибка есть, но её не видно
Тема может перекрывать сообщение об ошибке стилями, особенно если у блока маленький z-index или текст совпадает по цвету с фоном. В таком случае проблема не в логике, а в CSS. Откройте инспектор и проверьте, не скрыт ли блок ошибки, не обрезается ли он overflow: hidden.
Валидация ломается после оптимизации
Если вы объединяете и откладываете JS, скрипт квиза может запускаться раньше, чем загрузится библиотека плагина. Тогда обязательные поля перестают проверяться на клиенте. Решение — исключить скрипты квиза из отложенной загрузки или проверить порядок подключения.
Один и тот же email проходит несколько раз
Это уже не проблема обязательности, а проблема бизнес-логики. Если квиз должен собирать уникальные заявки, добавьте проверку на стороне сервера: сравнивайте email или телефон с уже сохранёнными значениями и не принимайте дубликаты без явного сценария.
Безопасность и производительность: что не стоит игнорировать
Квизы часто собирают персональные данные, поэтому обязательные поля должны работать не только удобно, но и аккуратно. Не храните лишнее, если оно не нужно для обработки заявки. Чем меньше данных вы запрашиваете, тем ниже риск ошибок и тем проще поддержка.
С точки зрения производительности не перегружайте квиз тяжёлыми скриптами и сторонними виджетами на каждом шаге. Если плагин квиза позволяет, отключите лишние анимации, автоподгрузку внешних библиотек и ненужные интеграции. Это особенно важно на страницах с высокой посещаемостью.
Если вы используете готовый плагин квизов и параллельно чистите сайт от лишнего кода, имеет смысл посмотреть в сторону Clearfy Pro: он помогает убрать часть технического шума, который мешает отладке и ускоряет работу сайта. Но саму логику обязательных полей всё равно лучше держать в настройках квиза или в своём коде, а не надеяться на «магическую» оптимизацию.
Что делать, если квиз всё равно пропускает пустые поля
Если после настройки и проверки пустые заявки всё ещё проходят, не ищите проблему в одном месте. Сначала отключите кеширование для страницы с квизом, затем временно выключите оптимизацию JS, после этого проверьте конфликт с темой и другими плагинами. Только так можно понять, где именно ломается цепочка.
Рабочая последовательность обычно такая: сначала настройка поля в плагине, потом серверная проверка, затем тест в браузере без кеша, и только после этого — публикация на боевом сайте. Для квизов это важнее, чем для обычных форм, потому что здесь пользователь проходит несколько шагов и ошибка на любом из них бьёт по конверсии.