Диагностика задачи: зачем нужен автоматический экспорт результатов опросов
Владельцы сайтов на WordPress с опросами часто сталкиваются с необходимостью выгрузить результаты голосований для анализа, отчетности или интеграции с другими сервисами. Ручной экспорт через админ-панель неудобен при большом количестве опросов и голосов, а автоматизация процесса позволяет регулярно получать свежие данные без участия администратора.
Пошаговое решение автоматического экспорта результатов опросов в CSV
1. Выбор метода экспорта
Варианты:
- Использовать готовый плагин с функцией экспорта и автоотправки по почте.
- Написать кастомный скрипт, который выгружает данные из базы и сохраняет CSV файл.
- Запустить WP-Cron задачу для регулярного экспорта и отправки файлов.
В этом руководстве рассмотрим комплексный вариант с собственным кодом для полной кастомизации.
2. Создаем функцию для генерации CSV из результатов опроса
Предположим, что опросы хранятся в таблице wp_polls_votes, а данные опроса — в wp_polls. Ниже пример функции для выборки голосов и формирования CSV.
function export_poll_results_to_csv($poll_id) {
global $wpdb;
$votes_table = $wpdb->prefix . 'polls_votes';
$polls_table = $wpdb->prefix . 'polls';
// Получаем все голоса для опроса
$results = $wpdb->get_results($wpdb->prepare(
"SELECT user_ip, vote_time, vote_option FROM $votes_table WHERE poll_id = %d",
$poll_id
));
if(empty($results)) {
return false;
}
$csv_data = [];
$csv_data[] = ['IP адрес', 'Время голосования', 'Выбранный вариант'];
foreach ($results as $row) {
$csv_data[] = [$row->user_ip, $row->vote_time, $row->vote_option];
}
// Генерируем CSV строку
$fh = fopen('php://temp', 'rw');
foreach ($csv_data as $line) {
fputcsv($fh, $line);
}
rewind($fh);
$csv_string = stream_get_contents($fh);
fclose($fh);
return $csv_string;
}
3. Сохраняем CSV и отправляем на почту
Добавим функцию для записи файла и отправки письма с вложением.
function save_and_mail_csv($poll_id, $email_to) {
$csv_content = export_poll_results_to_csv($poll_id);
if (!$csv_content) {
return false; // Нет данных для экспорта
}
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . "/poll_export_" . $poll_id . "_" . date('Ymd_His') . ".csv";
file_put_contents($file_path, $csv_content);
$subject = "Экспорт результатов опроса #" . $poll_id;
$message = "В приложении файл с результатами опроса.";
$headers = ['Content-Type: text/html; charset=UTF-8'];
$attachments = [$file_path];
$mail_sent = wp_mail($email_to, $subject, $message, $headers, $attachments);
return $mail_sent;
}
4. Автоматизируем экспорт через WP-Cron
Добавим задачу, которая будет запускаться, например, каждый день для выбранных опросов.
function schedule_poll_export() {
if (! wp_next_scheduled('daily_poll_export_event')) {
wp_schedule_event(time(), 'daily', 'daily_poll_export_event');
}
}
add_action('wp', 'schedule_poll_export');
function do_daily_poll_export() {
$poll_ids = [1, 2]; // ID опросов для экспорта
$email = 'admin@example.com'; // Email получателя
foreach ($poll_ids as $poll_id) {
save_and_mail_csv($poll_id, $email);
}
}
add_action('daily_poll_export_event', 'do_daily_poll_export');
Как проверить, что автоматический экспорт сработал
- Проверить наличие новых CSV файлов в папке загрузок WordPress (
wp-content/uploads). - Проверить почту, на которую отправляются файлы — должны приходить письма с вложениями.
- Включить логирование ошибок PHP для отлова возможных сбоев.
- В админке WordPress посмотреть расписание WP-Cron задач через плагин WP Crontrol.
Частые ошибки при реализации автоматического экспорта и их исправление
- Нет данных для экспорта: Проверьте, что в таблице голосов действительно есть записи для указанного ID опроса.
- Письма не доходят: Убедитесь, что wp_mail правильно настроена, или используйте SMTP-плагин для надежной отправки.
- WP-Cron не запускается: Проверить, что на сайте есть посещения или настроен системный cron для запуска WP-Cron.
- Права на запись в папку uploads: Файлы не создаются из-за недостаточных прав — исправить через CHMOD на сервере.
Практические советы по безопасности и производительности
- Не храните CSV с голосами в публичных папках без ограничений доступа, чтобы избежать утечки данных.
- Ограничьте количество экспортируемых опросов и периодичность запуска cron, чтобы не перегружать сервер.
- Используйте nonce и права доступа, если добавляете ручной экспорт через админку.
- Для больших объемов данных используйте пакетную выборку из базы с пагинацией.
Сравнение вариантов автоматического экспорта результатов опросов
| Вариант | Преимущества | Недостатки | Компромисс |
|---|---|---|---|
| Готовый плагин | Быстрая настройка, поддержка | Может быть ограничен по кастомизации | Хорош для новичков |
| Кастомный скрипт + WP-Cron | Полный контроль, гибкость | Требует знаний, ответственность за безопасность | Лучше для разработчиков |
| Ручной экспорт из админки | Простота | Не автоматизировано, неудобно при объемах | Использовать для редких задач |