Создание опросов на сайте WordPress — популярная задача для сбора обратной связи от пользователей. Но часто возникает необходимость не просто вывести результаты опроса на экран, а автоматически сохранить их в удобном формате для анализа — например, в CSV.
В этой статье мы подробно рассмотрим, как реализовать опрос с автоматическим экспортом результатов в CSV-файл. Это позволит вам без лишних усилий получать данные для обработки в Excel, Google Sheets или специализированных BI-инструментах.
Выбор плагина для создания опроса с экспортом
Для начала стоит выбрать подходящий плагин опросов, который поддерживает работу с результатами и хранит данные в базе WordPress.
Рассмотрим два популярных варианта:
- WP-Polls — легкий и простой плагин с базовой функциональностью, данные хранятся в базе в удобной форме.
- Forminator — мощный конструктор форм и опросов с возможностью экспорта результатов через административную панель.
Если вы хотите гибко настроить автоматический экспорт, лучше использовать WP-Polls и расширить его функционал собственным кодом.
Создание кастомного решения для автоматического экспорта в CSV
Далее мы покажем, как на базе WP-Polls реализовать автоматическую генерацию и сохранение CSV-файла с результатами опроса при каждом новом голосе.
Шаг 1. Создаем функцию для генерации CSV
Для начала напишем функцию wppolls_export_results_to_csv, которая выгружает результаты опроса в CSV и сохраняет файл в папку uploads.
function wppolls_export_results_to_csv() {
global $wpdb;
$polls_table = $wpdb->prefix . 'pollsq'; // таблица опросов
$polls_data_table = $wpdb->prefix . 'pollsq_answers'; // таблица ответов
// Получаем все опросы
$polls = $wpdb->get_results("SELECT pollq_id, pollq_question FROM $polls_table");
if (empty($polls)) return;
foreach ($polls as $poll) {
$results = $wpdb->get_results($wpdb->prepare(
"SELECT pollans_answer, pollans_count FROM $polls_data_table WHERE pollans_pollq_id = %d",
$poll->pollq_id
));
if (empty($results)) continue;
$csv_lines = [];
$csv_lines[] = ["Ответ", "Количество голосов"];
foreach ($results as $row) {
$csv_lines[] = [$row->pollans_answer, $row->pollans_count];
}
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/wppolls-results-poll-' . $poll->pollq_id . '.csv';
$fp = fopen($file_path, 'w');
foreach ($csv_lines as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
}
}Эта функция перебирает все опросы, получает ответы и их количество голосов, затем создает CSV-файл в стандартной папке загрузок WordPress.
Шаг 2. Запускаем экспорт после каждого голосования
Чтобы автоматически обновлять CSV после каждого нового голоса, повесим вызов функции на хук wp_ajax_wppolls_vote, который срабатывает при голосовании в WP-Polls.
add_action('wp_ajax_wppolls_vote', 'wppolls_after_vote_export_csv');
add_action('wp_ajax_nopriv_wppolls_vote', 'wppolls_after_vote_export_csv');
function wppolls_after_vote_export_csv() {
// Выполняем стандартное поведение плагина
do_action('wppolls_vote');
// Экспортируем результаты
wppolls_export_results_to_csv();
}Таким образом, CSV-файлы с результатами будут обновляться сразу после каждого голосования без вашего вмешательства.
Реализация отображения ссылок на CSV в админке
Чтобы быстро получить доступ к актуальным CSV-результатам, добавим специальную страницу в меню админки WordPress с перечнем всех опросов и ссылками на соответствующие CSV-файлы.
add_action('admin_menu', 'wppolls_add_csv_page');
function wppolls_add_csv_page() {
add_submenu_page(
'tools.php',
'Экспорт результатов WP-Polls',
'Экспорт опросов CSV',
'manage_options',
'wppolls-csv-export',
'wppolls_render_csv_export_page'
);
}
function wppolls_render_csv_export_page() {
global $wpdb;
$polls_table = $wpdb->prefix . 'pollsq';
$polls = $wpdb->get_results("SELECT pollq_id, pollq_question FROM $polls_table");
$upload_dir = wp_upload_dir();
$base_url = $upload_dir['baseurl'];
echo '<div class="wrap"><h1>Экспорт результатов WP-Polls</h1><table class="wp-list-table widefat fixed"><thead><tr><th>Опрос</th><th>CSV файл</th></tr></thead><tbody>';
foreach ($polls as $poll) {
$csv_url = $base_url . '/wppolls-results-poll-' . $poll->pollq_id . '.csv';
echo '<tr><td>' . esc_html($poll->pollq_question) . '</td><td><a href="' . esc_url($csv_url) . '" target="_blank">Скачать CSV</a></td></tr>';
}
echo '</tbody></table></div>';
}Теперь администратор может быстро перейти к CSV-отчетам по любому опросу и загрузить свежие данные.
Дополнительные советы и рекомендации
Оптимизация и безопасность
При работе с файлами важно учитывать права доступа. Убедитесь, что папка для загрузок защищена и к CSV-файлам не имеют доступа посторонние пользователи. В идеале — ограничить просмотр файлов только администраторам.
Для этого можно добавить проверку ролей в функции отображения ссылок и настроить .htaccess или другие серверные правила.
Расширение функционала
Если вы хотите получать результаты не только в CSV, но и в Excel, JSON или отправлять их на email, можно дополнительно интегрировать библиотеки PHP, например, PhpSpreadsheet, или использовать WP-Cron для периодической отправки отчетов.
Использование готовых профессиональных решений
Если нужен более мощный и гибкий функционал опросов с автоматическим экспортом, обратите внимание на плагин Forminator от WPSHOP. Он поддерживает экспорт в CSV из интерфейса и имеет расширенные возможности аналитики.
Итог
Мы рассмотрели, как создать в WordPress опрос с автоматическим экспортом результатов в CSV с помощью плагина WP-Polls и собственного кода. Такой подход позволит вам легко интегрировать сбор данных с последующим анализом, не прибегая к сложным внешним сервисам.
Используйте примеры кода и адаптируйте под свои задачи, чтобы сделать работу с опросами максимально удобной и эффективной.