В современном WordPress-сайте часто возникает необходимость не просто собрать данные через опрос, но и автоматически подсчитывать результаты, а также получать подробную аналитику по голосам. В этой статье мы подробно разберем, как создать такой опрос, используя готовые плагины и собственный код. Рассмотрим практические примеры, которые помогут вам реализовать удобный и функциональный инструмент опросов.
Выбор плагина для опросов с автоподсчетом голосов
Для начала стоит определиться с плагином, который позволит реализовать базовые функции опроса с подсчетом голосов. Среди популярных вариантов выделим:
- WP-Polls — классический плагин с простым интерфейсом и базовым подсчетом;
- Quizle (https://wpshop.ru/plugins/quizle/?utm_source=wppolls.ru&utm_medium=article&utm_campaign=kak-sozdat-opros-s-avtopodschetom-i-podrobnoj-analitikoj) — современный плагин с расширенными возможностями, включая многоуровневые опросы и аналитику;
- OpinionStage — мощный инструмент с визуальным редактором и подробной статистикой;
- Forminator — универсальный плагин форм и опросов с поддержкой интеграции аналитики.
Для наших целей оптимально подойдет Quizle, так как он сочетает простоту настройки и мощный функционал аналитики.
Установка и базовая настройка Quizle
После установки и активации перейдите в раздел «Quizle» в админке. Создайте новый опрос, задайте вопросы и варианты ответов. В настройках включите автоматический подсчет голосов — это позволит сразу видеть результаты после голосования.
Также рекомендуем активировать опцию сбора IP-адресов и пользовательских меток, чтобы избежать накруток и получать детальную аналитику.
Добавление кастомной аналитики с помощью кода
Для расширения возможностей аналитики можно добавить собственный обработчик результатов опроса через хук. Ниже пример функции, которая подсчитывает не только общее количество голосов, но и распределение по категориям и времени голосования.
function wppolls_process_poll_results($poll_id) {
global $wpdb;
$table_votes = $wpdb->prefix . 'wppolls_votes';
// Получаем все голоса для конкретного опроса
$votes = $wpdb->get_results($wpdb->prepare("SELECT option_id, vote_time FROM $table_votes WHERE poll_id = %d", $poll_id));
$result = [];
foreach ($votes as $vote) {
if (!isset($result[$vote->option_id])) {
$result[$vote->option_id] = ['count' => 0, 'times' => []];
}
$result[$vote->option_id]['count']++;
$result[$vote->option_id]['times'][] = $vote->vote_time;
}
return $result;
}
Эту функцию можно вызвать в админке для получения детальной статистики или вывести на фронтенде с помощью шорткода.
Пример вывода аналитики на странице
Создадим шорткод для отображения результатов с распределением голосов по вариантам и графиком активности по времени:
function wppolls_show_poll_analytics($atts) {
$atts = shortcode_atts(['poll_id' => 0], $atts);
if (!$atts['poll_id']) return 'Poll ID not specified';
$results = wppolls_process_poll_results(intval($atts['poll_id']));
if (empty($results)) return 'No votes yet';
$output = '<div class="wppolls-analytics">';
foreach ($results as $option_id => $data) {
$output .= '<p>Option ' . esc_html($option_id) . ': ' . intval($data['count']) . ' votes</p>';
}
// Здесь можно добавить визуализацию, например, с помощью Chart.js или Google Charts
$output .= '</div>';
return $output;
}
add_shortcode('wppolls_analytics', 'wppolls_show_poll_analytics');
Добавьте шорткод [wppolls_analytics poll_id="123"] в нужное место на сайте, заменив 123 на ID опроса.
Обеспечение защиты от накруток и повторных голосов
Чтобы результаты были честными, важно ограничить возможность повторного голосования. Рассмотрим несколько способов:
- Куки и сессии: простой метод, но уязвим к очистке куки пользователем;
- IP-адреса: более надежно, но может создавать проблемы для пользователей из одной сети;
- Авторизация пользователей: самый надежный способ — разрешать голосовать только зарегистрированным и авторизованным пользователям;
- Рекапча: добавление Google reCAPTCHA снижает риск автоматических накруток.
В плагине Quizle реализованы встроенные настройки по ограничению повторных голосов, которые можно активировать в панели управления.
Пример кода для ограничения голосования по IP
function wppolls_check_ip_vote($poll_id) {
global $wpdb;
$user_ip = $_SERVER['REMOTE_ADDR'];
$table_votes = $wpdb->prefix . 'wppolls_votes';
$vote_exists = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $table_votes WHERE poll_id = %d AND user_ip = %s",
$poll_id, $user_ip
));
return $vote_exists > 0;
}
Эту функцию можно интегрировать в обработчик голосования, чтобы блокировать повторные голоса с одного IP.
Расширение функционала: интеграция с WPRemark для анализа ответов
Для более глубокого анализа данных опросов можно использовать плагин WPRemark, который умеет собирать статистику, строить отчеты и визуализировать результаты. Это позволит создавать комплексные отчеты по опросам с различными метриками и экспортом данных.
Настройка интеграции сводится к подключению WPRemark к базе опросов и настройке правил сбора данных. Это значительно расширит возможности вашего опросного инструмента без дополнительного программирования.