Как сделать автоматический экспорт результатов опросов в Excel (CSV) в WordPress

Диагностика задачи: зачем нужен автоматический экспорт результатов опросов

Владельцы сайтов на 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Полный контроль, гибкостьТребует знаний, ответственность за безопасностьЛучше для разработчиков
Ручной экспорт из админкиПростотаНе автоматизировано, неудобно при объемахИспользовать для редких задач
Как создать выставку результатов опроса в WordPress с фильтрацией и сортировкой
30.03.2026
Как автоматизировать удалённую модерацию опросов в WordPress
06.03.2026
Как сделать защиту от повторных голосов в опросах WordPress без изменения базы данных
11.05.2026
Как удалить повторное голосование в опросах WordPress без изменения базы данных
20.07.2026
Как создать опрос с автоматическим экспортом результатов в CSV в WordPress
10.04.2026