Шаблоны, REST API, данные
Технические детали для разработчиков: переопределение шаблонов темой, программный доступ к результатам и устройство хранения.
Переопределение шаблонов
Любой шаблон из wp-elder-quiz/template-parts/ можно заменить, положив одноимённый файл в тему:
ваша-тема/wp-elder-quiz/result.php → экран результата
ваша-тема/wp-elder-quiz/quiz-page.php → standalone-страница квиза
ваша-тема/wp-elder-quiz/certificate.php → сертификат
ваша-тема/wp-elder-quiz/mail/admin.php → письмо администратору
ваша-тема/wp-elder-quiz/mail/abandon.php → письмо-возврат
Поиск идёт сначала в теме (и дочерней теме), затем в плагине; путь можно переопределить фильтром elder_quiz_template_override_path.
REST API
Пространство имён elder-quiz/v1. Доступ — для авторизованных пользователей с правом редактирования квизов (меняется фильтром elder_quiz_rest_capability):
| Маршрут | Описание |
|---|---|
GET /wp-json/elder-quiz/v1/quizzes | Список квизов. |
GET /wp-json/elder-quiz/v1/results | Список результатов. Параметры: quiz_id, page, per_page, offset, order, orderby, date_from. |
GET /wp-json/elder-quiz/v1/results/<id> | Один результат целиком. |
curl -u admin:app-password \
"https://site.ru/wp-json/elder-quiz/v1/results?quiz_id=7&per_page=50"
Как хранятся данные
| Таблица | Содержимое |
|---|---|
{prefix}elder_quiz_quizzes | Квизы: заголовок, слаг, статус, автор и вся конфигурация одним JSON-полем config. |
{prefix}elder_quiz_results | Прохождения: контакты, баллы, снимок вопросов-ответов (result_data), метки и служебные данные (additional_data), даты в UTC. Признак завершения — заполненный finished_at. |
- Квизы — не записи WordPress: у них нет ревизий и корзины, они не появляются в «Записях» и не нагружают
wp_posts. - Снимок
result_dataделает статистику независимой от последующих правок квиза. - Файлы посетителей — в защищённом подкаталоге
uploads(закрыт.htaccess+index.php).
Замечания по безопасности
- Публичный AJAX-endpoint защищён nonce (отключаемо фильтром
elder_quiz_verify_nonce— только для крайних случаев кеширования). - Целостность прохождения защищена подписью HMAC-SHA256: подделать чужой результат или вытащить неопубликованный квиз подменой параметров нельзя.
- Контакты валидируются на сервере; ключи мессенджеров принимаются только из белого списка включённых на квизе.
- Правильные ответы и подсказки не попадают в HTML — клиент запрашивает их с сервера в момент проверки.
- Штраф за подсказку и итог калькулятора фиксируются сервером — клиентские значения ни на что не влияют.
- Экспорт CSV требует nonce и соответствующего права.
Соглашения об именах
| Область | Префикс |
|---|---|
| PHP-хуки | elder_quiz_* |
| CSS-классы | elder-quiz* (BEM-подобно) |
| CSS-переменные | --elder-quiz-* |
| JS-события | elder-quiz:* |
| REST | elder-quiz/v1 |
| Шорткоды | [elder_quiz], [elder_quiz_widget], [elder_quiz_page_content] |