wpquiz.ru wordpress WPQuiz.ru

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

Задача: зачем нужно отслеживание просмотров квизов

Отслеживание просмотров позволяет понять, какие квизы привлекают больше пользователей, оценить вовлечённость и оптимизировать контент. Если вы создаёте квизы на 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
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее