wpquiz.ru wordpress WPQuiz.ru

Как устранить зависание квиза в WordPress при переходе между вопросами

Сценарий типичный: квиз открывается, первый вопрос работает, но при нажатии «Далее» ничего не происходит, кнопка крутится, а иногда шаг меняется только после перезагрузки страницы. В WordPress это почти всегда не одна причина, а связка из JavaScript-конфликта, кэша, оптимизации скриптов или ошибки в разметке формы.

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

Что обычно ломает переход между вопросами

У квизов в WordPress есть несколько уязвимых мест. Сам переход между шагами чаще всего завязан на JavaScript, AJAX или обработку состояния формы в браузере. Если один из скриптов не загрузился, был отложен не вовремя или получил ошибку, пользователь видит зависание без понятного сообщения.

Типовые причины

  • конфликт JavaScript с темой или другим плагином;
  • агрессивная оптимизация: defer, delay, объединение и минификация;
  • ошибка в консоли браузера из-за стороннего скрипта;
  • битый кэш страницы или кэш объекта;
  • неверная разметка шага квиза после ручной правки шаблона;
  • блокировка AJAX-запроса на уровне безопасности, CDN или WAF.

Если квиз сделан через специализированный плагин, например Quizle, логика обычно проще: сначала проверяем, что сам плагин и его скрипты работают без вмешательства оптимизаторов, а уже потом возвращаем ускорение страницы по одному параметру.

Диагностика: где именно ломается квиз

Не начинайте с отключения всего подряд. Сначала посмотрите, что происходит в браузере и в сети. Это экономит время и позволяет не сломать рабочие части сайта.

Проверка в консоли браузера

Откройте страницу с квизом, нажмите F12 и перейдите в Console. Если при клике на кнопку «Далее» появляется ошибка, она часто укажет на конкретный скрипт или плагин. Ищите сообщения вида Uncaught TypeError, Cannot read properties of undefined, $ is not defined, jQuery is not defined.

Если ошибка появляется только на странице квиза, а на других страницах сайта всё тихо, это хороший признак: проблема локальная, а не системная.

Проверка сетевых запросов

Во вкладке Network нажмите кнопку перехода между вопросами и посмотрите, уходит ли AJAX-запрос и какой у него ответ. Если запрос возвращает 403, 500 или вообще не уходит, ищите блокировку на стороне сервера, security-плагина или кэша.

Если запрос уходит, но ответ пустой или с HTML-ошибкой вместо JSON, значит, ломается серверная часть: PHP warning, fatal error или вмешательство другого плагина.

Что проверить в первую очередь

  • открывается ли квиз в режиме инкогнито без автозаполнения и расширений;
  • есть ли ошибки в Console;
  • проходит ли AJAX-запрос в Network;
  • не включена ли оптимизация скриптов на странице квиза;
  • не менялась ли тема или шаблон страницы недавно;
  • не стоит ли кэш страницы на уровне плагина, сервера или CDN.

Пошаговое решение без лишнего риска

Ниже порядок, который обычно помогает быстрее всего. Он рассчитан на ситуацию, когда квиз уже установлен и нужно вернуть нормальную работу без полной переделки.

1. Временно отключите оптимизацию JavaScript для страницы квиза

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

Проверьте настройки кэширующего или оптимизирующего плагина и добавьте в исключения:

  • скрипты самого плагина квиза;
  • jQuery, если квиз на нём завязан;
  • страницу, где встроен квиз;
  • inline-скрипты инициализации, если плагин их использует.

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

2. Проверьте конфликт с темой и сторонними плагинами

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

Если переключать тему на боевом сайте нельзя, используйте staging-копию. На ней отключайте плагины по одному: сначала всё, что связано с кэшем, безопасностью и оптимизацией, потом визуальные конструкторы, затем маркетинговые интеграции.

3. Убедитесь, что скрипты подключаются правильно

Если вы добавляли квиз вручную через шаблон или shortcode, проверьте, что скрипты и стили подключаются через wp_enqueue_script() и wp_enqueue_style(), а не вставлены напрямую в шаблон без зависимости от WordPress.

Пример корректного подключения в теме или мини-плагине:

<?php
add_action('wp_enqueue_scripts', function () {
    wp_enqueue_script(
        'my-quiz',
        get_stylesheet_directory_uri() . '/assets/js/my-quiz.js',
        array('jquery'),
        '1.0.0',
        true
    );

    wp_localize_script('my-quiz', 'MyQuizData', array(
        'ajaxUrl' => admin_url('admin-ajax.php'),
        'nonce'    => wp_create_nonce('my_quiz_nonce'),
    ));
});

Если скрипт зависит от jQuery, не подключайте его как независимый модуль без проверки. Многие зависания квизов начинаются именно с того, что код ожидает $, а на странице его уже нет.

4. Проверьте серверный ответ на AJAX

Если квиз отправляет данные на сервер, обработчик должен возвращать предсказуемый JSON. Любой echo до wp_send_json_success() или PHP warning сломает формат ответа.

Пример простого обработчика:

<?php
add_action('wp_ajax_my_quiz_step', 'my_quiz_step_handler');
add_action('wp_ajax_nopriv_my_quiz_step', 'my_quiz_step_handler');

function my_quiz_step_handler() {
    check_ajax_referer('my_quiz_nonce', 'nonce');

    $step = isset($_POST['step']) ? absint($_POST['step']) : 0;

    if ($step < 1) {
        wp_send_json_error(array('message' => 'Некорректный шаг'));
    }

    wp_send_json_success(array(
        'nextStep' => $step + 1,
    ));
}

Если в ответе вместо JSON приходит HTML с сообщением об ошибке, откройте wp-config.php и временно включите логирование, а не вывод ошибок на экран:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

После этого проверьте wp-content/debug.log. Там обычно видно, какой плагин или файл ломает ответ.

Если квиз встроен через плагин: что смотреть в настройках

У плагинов квизов часто есть отдельные опции для анимации, автоперехода, валидации и загрузки ресурсов. Именно там можно найти причину зависания, даже если сам плагин исправен.

ПодходЧто даётКомпромисс
Отключить оптимизацию скриптовБыстро подтверждает конфликтСтраница может стать тяжелее
Исключить только скрипты квизаСохраняет ускорение сайтаНужно точно знать имена файлов
Переписать логику через кодПолный контроль над поведениемДольше внедрять и тестировать

Если вы используете Quizle или похожий плагин, проверьте, не включены ли одновременно автопереход и жесткая валидация обязательных полей. Иногда пользователь нажимает «Далее», но форма молча не пропускает шаг из-за пустого поля, которое визуально не подсвечено.

Проверка результата после исправления

Когда внесли изменения, не ограничивайтесь одним ручным кликом. Нужно убедиться, что квиз работает в тех условиях, где раньше ломался.

Мини-чек-лист проверки

  • квиз открывается в обычном окне и в инкогнито;
  • кнопка «Далее» меняет шаг без перезагрузки;
  • ошибок в Console нет;
  • AJAX-запрос получает 200 и валидный JSON;
  • данные из квиза доходят до формы, CRM или почты;
  • кэш страницы не возвращает старую версию скрипта;
  • на мобильном переходы работают так же, как на десктопе.

Если проблема была в кэше, обязательно очистите не только страницу, но и серверный кэш, CDN и кэш браузера. Иначе можно решить, что исправление не сработало, хотя пользователь просто видит старый JS-файл.

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

Квиз работает у администратора, но ломается у гостей

Это частая история, когда у залогиненного пользователя отключён кэш или подгружается другая версия страницы. Проверяйте квиз в режиме гостя, а не только из админки.

После минификации всё перестало переключаться

Значит, оптимизатор изменил порядок загрузки или склеил скрипты так, что зависимость от jQuery или inline-инициализации нарушилась. Добавьте скрипт квиза в исключения и не минифицируйте его вместе с остальными.

AJAX отвечает 403

Обычно это nonce, security-плагин или WAF. Проверьте, не истёк ли nonce, и не блокирует ли запрос правило в Wordfence, Cloudflare или другом фильтре. Если квиз нужен для внешних посетителей, обработчик должен быть доступен через wp_ajax_nopriv_....

Шаг меняется, но данные не сохраняются

Тогда проблема уже не в интерфейсе, а в серверной обработке. Смотрите, не обрезаются ли поля, не меняются ли имена input после кастомизации и не падает ли отправка на последнем шаге.

Что сделать для стабильности и скорости

Квиз — это интерактивный блок, и он чувствителен к лишнему JavaScript. Если страница уже тяжёлая, не добавляйте туда ещё и десяток маркетинговых виджетов без необходимости. Чем меньше конфликтов на фронтенде, тем проще поддерживать квиз.

  • подключайте скрипты только на страницах, где реально есть квиз;
  • не грузите один и тот же JS дважды через тему и плагин;
  • проверяйте совместимость с кэшем после каждого обновления плагина;
  • если квиз собирает лиды, логируйте ошибки отправки;
  • не редактируйте плагин напрямую — лучше вынести доработки в дочернюю тему или мини-плагин.

Если нужен не просто квиз, а связка квиза с контентом, формами и блоками доверия, имеет смысл смотреть на решения, где это уже собрано в одном стеке. Например, для WordPress-проектов с квизами и блоками вовлечения удобно использовать специализированные инструменты вроде Quizle или дополнять их блоками доверия и FAQ через Expert Review, если это действительно помогает сценарию страницы.

Главная проверка простая: если квиз стабильно проходит все шаги без ошибок в консоли, без 4xx/5xx в сети и без зависимости от режима администратора, значит, вы нашли не временный обход, а рабочее исправление.

×
Прокачай свой сайт WordPress!

WordPress

-20% на премиум темы и плагины

Создай сайт своей мечты ⋙