Задача: зачем нужно отслеживание просмотров квизов
Отслеживание просмотров позволяет понять, какие квизы привлекают больше пользователей, оценить вовлечённость и оптимизировать контент. Если вы создаёте квизы на WordPress с помощью плагинов или собственного кода, встроенного счётчика просмотров может не быть. В этой статье покажу, как добавить простой и эффективный механизм отслеживания просмотров квизов.
Диагностика проблемы: как понять, что просмотры не учитываются
Если вы используете готовый плагин для квизов, проверьте, есть ли в его настройках статистика просмотров. Если нет, или данные кажутся некорректными, значит, нужно добавить собственную систему. Для кастомных квизов без статистики очевидно, что их просмотры не регистрируются.
Проверка текущих данных
- Просмотрите базу данных, есть ли таблицы или поля с подсчётом просмотров (например, postmeta с ключом
quiz_views). - Проверьте, выводится ли на странице квиза количество просмотров.
- Используйте инструменты разработчика браузера, чтобы увидеть, вызываются ли AJAX-запросы для отслеживания.
Реализация отслеживания просмотров квизов на WordPress
Рассмотрим два варианта: для кастомных квизов на базе кастомного типа записи и для квизов в плагине WP Quiz. В обоих случаях основной подход — сохранять количество просмотров в метаданных записи.
1. Добавление счётчика просмотров для кастомного типа записи "quiz"
В functions.php вашей темы или в плагине добавьте следующий код:
function wpquiz_track_quiz_view() {
if (is_singular('quiz')) {
global $post;
$views = (int) get_post_meta($post->ID, 'quiz_views', true);
$views++;
update_post_meta($post->ID, 'quiz_views', $views);
}
}
add_action('wp_head', 'wpquiz_track_quiz_view');Этот код увеличит счётчик при каждом загрузке страницы квиза. Но он считает все загрузки, включая ботов и повторные просмотры пользователя.
2. Улучшенный вариант с использованием куков для уникальных просмотров
function wpquiz_track_unique_quiz_view() {
if (is_singular('quiz')) {
global $post;
$quiz_id = $post->ID;
$cookie_name = 'wpquiz_viewed_' . $quiz_id;
if (!isset($_COOKIE[$cookie_name])) {
$views = (int) get_post_meta($quiz_id, 'quiz_views', true);
update_post_meta($quiz_id, 'quiz_views', $views + 1);
setcookie($cookie_name, '1', time() + 86400, COOKIEPATH, COOKIE_DOMAIN);
}
}
}
add_action('wp_head', 'wpquiz_track_unique_quiz_view');Этот код учитывает только уникальные просмотры квиза с одного браузера за сутки.
3. Вывод количества просмотров на странице квиза
function wpquiz_show_views() {
if (is_singular('quiz')) {
global $post;
$views = (int) get_post_meta($post->ID, 'quiz_views', true);
echo '<div class="quiz-views">Просмотров: ' . esc_html($views) . '</div>';
}
}
add_action('the_content', function($content) {
if (is_singular('quiz')) {
ob_start();
wpquiz_show_views();
$views_html = ob_get_clean();
return $content . $views_html;
}
return $content;
});Проверка результата после внедрения
1. Откройте страницу квиза в браузере в режиме инкогнито и обновите несколько раз — счётчик увеличится на 1 (если используете вариант с куками).
2. Откройте страницу с другого браузера или устройства — счётчик увеличится.
3. Проверьте в базе данных через phpMyAdmin или WP CLI, что метаполе quiz_views обновляется.
4. Убедитесь, что счётчик корректно выводится на странице квиза.
Частые ошибки и как их исправить
- Счётчик не увеличивается: Проверьте, что хук
wp_headсрабатывает, и что шаблон вызываетwp_head(). Без этого код не выполнится. - Просмотры считаются некорректно: Если не использовать куки, счётчик будет расти при каждом обновлении страницы, включая боты. Используйте куки или сессии.
- Куки не устанавливаются: Проверьте, что функция
setcookie()вызывается до вывода контента. Если нет, перенесите код вinitили используйте AJAX-запросы. - Проблемы с безопасностью: Всегда используйте функции экранирования при выводе (
esc_html()), чтобы избежать XSS.
Практические советы по безопасности и производительности
- Для снижения нагрузки используйте AJAX-запросы для обновления счётчика, чтобы не перегружать
wp_head. - Кеширование страниц может мешать обновлению счётчика, отключайте кеш для страниц квизов.
- Для крупных проектов лучше хранить просмотры в отдельной таблице, а не в метаполях, чтобы избежать проблем с производительностью.
- Обязательно фильтруйте и валидируйте данные, используйте nonce для AJAX-запросов.
Сравнение способов реализации
| Способ | Плюсы | Минусы | Пример кода |
|---|---|---|---|
| Простой счётчик в wp_head | Легко реализовать, сразу работает | Считает все загрузки, включая ботов и обновления | См. раздел 2.1 |
| Отслеживание уникальных просмотров через куки | Учёт уникальных просмотров, меньше ложных данных | Не учитывает пользователей с выключенными куками | См. раздел 2.2 |
| AJAX-обновление счётчика | Обновление без перезагрузки, уменьшение нагрузки | Сложнее реализовать, требует JS и серверной логики | Можно доработать на основе раздела 2.2 |