Дубли вопросов в квизе обычно всплывают не сразу. Снаружи кажется, что форма работает: пользователь отвечает, результат считается, лиды приходят. Но в аналитике видно лишние шаги, в админке — повторяющиеся ответы, а в сценариях с ветвлением один и тот же вопрос показывается дважды или даже трижды. Чаще всего причина не в “глюке WordPress”, а в том, как плагин хранит вопросы, как подключён шаблон и не дублируется ли блок квиза на странице через шорткод, виджет или конструктор.
Когда дубли вопросов — это не баг интерфейса, а ошибка сборки квиза
Сначала стоит понять, где именно появляется повтор. Это важно, потому что лечится разными способами. Если вопрос дублируется в редакторе самого плагина, проблема обычно в структуре данных: один и тот же элемент добавлен дважды, а ветвление ссылается на него по разным условиям. Если дубли видны только на странице сайта, чаще виноваты шорткод, кеш или повторный вывод блока в шаблоне.
Типичные сценарии
- вопрос повторяется в одном и том же шаге квиза;
- один и тот же вопрос показывается в разных ветках, хотя должен быть только в одной;
- после обновления плагина появляются дубли в уже собранных квизах;
- квиз вставлен дважды: через шорткод в контенте и через блок/виджет в шаблоне;
- вопросы дублируются только у части пользователей из-за старого кеша страницы или скриптов.
Диагностика: где искать причину в первую очередь
Не начинайте с правки кода. Сначала проверьте сам квиз и страницу, на которой он выводится. Это экономит время и помогает не сломать рабочую логику.
Проверьте структуру квиза в админке
Откройте список шагов и вопросов. Если один и тот же текст вопроса встречается дважды, но у элементов разные ID, это не всегда ошибка: иногда так задумано для разных веток. Если же дублируется один и тот же ID или один и тот же вопрос стоит в одной ветке дважды, это уже ошибка конфигурации.
Проверьте вывод на странице
Посмотрите исходный HTML страницы и найдите контейнер квиза. Если один и тот же блок вставлен дважды, вы увидите два одинаковых корневых элемента. Это бывает, когда шорткод стоит в записи, а тема ещё и выводит его через the_content в шаблоне блока, или когда редактор Gutenberg содержит и шорткод, и отдельный блок плагина.
Проверьте кеш и минификацию
Если дубли видны не всегда, очистите кеш плагина, серверный кеш и CDN. Иногда проблема не в данных, а в том, что старый JS и новый HTML конфликтуют между собой. Для квизов это особенно заметно, если логика показа вопросов завязана на скрипт, который собирает DOM после загрузки страницы.
Как убрать дубли: рабочая схема без лишнего риска
Ниже — порядок действий, который обычно даёт результат быстрее всего. Он подходит для большинства плагинов квизов, где вопросы хранятся как отдельные элементы, а вывод идёт через шорткод или блок.
1. Удалите повторяющийся элемент в самом квизе
Если дубли есть в структуре, сначала оставьте один экземпляр вопроса. Не пытайтесь скрыть второй через CSS: это не решает проблему логики, а только маскирует её на фронтенде. После удаления проверьте, не сломались ли переходы между шагами.
2. Проверьте условия показа
Если вопрос должен появляться только при определённом ответе, убедитесь, что условие не дублирует само себя. Частая ошибка — один и тот же вопрос привязан к двум веткам, которые оба могут сработать для одного ответа. В итоге пользователь видит повтор.
3. Уберите повторный вывод квиза на странице
Если квиз вставлен в контент и одновременно подхватывается шаблоном темы, оставьте только один способ вывода. Для проверки временно переключитесь на стандартную тему или создайте тестовую страницу без дополнительных блоков. Если дубли исчезли, причина в шаблоне или в том, как тема обрабатывает контент.
4. Сбросьте кеш после правок
После изменения структуры квиза обязательно очистите кеш. Иначе вы будете проверять старую версию страницы и решать несуществующую проблему. Если используется CDN, сбросьте и его.
Если нужен быстрый фикс через код
Иногда плагин не даёт нормально удалить дублирующийся вопрос через интерфейс, а править вручную JSON или сериализованные данные неудобно. Тогда безопаснее сделать точечную правку на уровне вывода, чем пытаться переписать всю логику квиза.
Ниже пример фильтра, который можно использовать как шаблон для своего плагина, если он отдаёт массив вопросов через фильтр. Название фильтра у конкретного плагина будет своим, поэтому этот код — не готовая вставка “как есть”, а рабочий паттерн для темы или mu-plugin:
<?php
add_filter( 'my_quiz_questions', function( $questions ) {
$seen = [];
$unique = [];
foreach ( $questions as $question ) {
if ( empty( $question['id'] ) ) {
$unique[] = $question;
continue;
}
if ( isset( $seen[ $question['id'] ] ) ) {
continue;
}
$seen[ $question['id'] ] = true;
$unique[] = $question;
}
return $unique;
} );
Смысл простой: если в массиве два одинаковых ID, второй отбрасывается. Такой подход полезен, когда дубли появляются из-за повторной сборки массива на стороне темы или кастомного плагина. Но если проблема в данных квиза, лучше всё же исправить источник, а не фильтровать симптомы.
Если квиз выводится через шорткод
Проверьте, не вызывается ли шорткод дважды. В теме это часто происходит в шаблоне записи, если разработчик вручную добавил do_shortcode() поверх стандартного the_content. В таком случае один и тот же квиз может появиться в тексте и в дополнительном блоке ниже.
<?php
$content = apply_filters( 'the_content', get_post_field( 'post_content', get_the_ID() ) );
echo $content;
Если в шаблоне уже есть такой вывод, не дублируйте его дополнительным вызовом do_shortcode() для того же контента. Для точечной вставки шорткод должен быть только в одном месте.
Сравнение подходов: что выбрать в реальном проекте
| Подход | Когда подходит | Минус |
|---|---|---|
| Исправить структуру квиза в админке | Дубли есть в самих вопросах или ветках | Нужно вручную проверить все переходы |
| Убрать повторный вывод в теме | Квиз вставлен дважды на странице | Требует правки шаблона или блока |
| Фильтровать массив вопросов кодом | Нельзя быстро исправить источник данных | Это обходной путь, а не полноценное решение |
Как проверить, что дубли действительно исчезли
Проверка должна быть не визуальной “на глаз”, а по сценарию. Пройдите квиз как обычный пользователь и отдельно как авторизованный администратор, если у вас включены разные условия показа. Смотрите не только на текст вопросов, но и на порядок шагов, количество ответов и итоговый результат.
- откройте страницу в режиме инкогнито;
- пройдите квиз до конца и проверьте, нет ли повторяющихся шагов;
- сравните HTML страницы до и после правки;
- очистите кеш и повторите тест;
- если есть аналитика событий, проверьте, не удвоились ли отправки.
Если используете браузерную консоль, полезно посмотреть, не инициализируется ли скрипт квиза дважды. Для этого откройте DevTools и проверьте, нет ли повторных ошибок или повторного рендера одного и того же контейнера после загрузки страницы.
Частые ошибки и как их исправить
Скрыли дубль через CSS
Это не решает проблему. Пользователь может не видеть повтор, но логика квиза, счётчики и отправка данных останутся сломанными. Исправляйте источник данных или шаблон.
Удалили вопрос, но не обновили ветвление
После удаления элемента ссылки на него могут остаться в условиях перехода. Тогда квиз начнёт вести себя непредсказуемо: пропускать шаги, возвращать к началу или показывать пустой экран.
Очистили только один уровень кеша
Если у вас есть плагин кеша, серверный кеш и CDN, сброс одного слоя не гарантирует актуальный результат. Проверяйте все уровни по очереди.
Правили продакшн без теста
Для квизов это особенно рискованно: одна лишняя правка в структуре может сломать сбор лидов. Если есть возможность, сначала прогоните копию страницы на staging.
Что сделать, чтобы дубли не вернулись
Если квизы на сайте используются регулярно, имеет смысл сразу ввести несколько правил. Не храните один и тот же вопрос в нескольких местах без явной причины. Не смешивайте ручную вставку шорткода и автоматический вывод через шаблон. После обновления плагина проверяйте хотя бы один ключевой сценарий прохождения.
Если вам нужен плагин квизов с понятной логикой и удобной сборкой сценариев, посмотрите Quizle от WPShop: https://wpshop.ru/plugins/quizle. Но даже с хорошим плагином дубли вопросов почти всегда появляются из-за настройки, шаблона или кеша, а не из-за самого WordPress.
Если коротко: сначала найдите источник повтора, потом исправьте структуру квиза, затем проверьте вывод на странице и только после этого трогайте код. В задачах с квизами это обычно самый надёжный порядок.