Диагностика задачи: почему нужен автоматический экспорт данных из WPForms
WPForms по умолчанию сохраняет ответы пользователей в базе данных WordPress, но для аналитики и отчетности часто требуется выгружать данные в удобном формате, например, CSV. Ручной экспорт через админку неудобен при большом объёме данных и регулярной необходимости отчетов. Автоматизация экспорта позволяет:
- Экономить время на сбор данных;
- Интегрировать ответы с внешними системами;
- Обеспечить регулярное резервное копирование;
- Упростить анализ данных в Excel или BI-системах.
Задача: настроить автоматическое сохранение ответов WPForms и их периодический экспорт в CSV с отправкой на email или сохранением на сервер.
Как WPForms хранит данные форм
Данные WPForms сохраняются в таблицах базы WordPress: wp_wpforms_entries (основные записи) и wp_wpforms_entry_fields (значения полей). Для экспорта нужно собрать данные из этих таблиц, сопоставив их с формой.
Основные таблицы:
wp_wpforms_entries— записи каждой отправки;wp_wpforms_entry_fields— поля с ответами по каждой записи;wp_posts— форма хранится как кастомный тип записиwpforms.
Пошаговое решение: автоматический экспорт данных формы WPForms в CSV
1. Создаем функцию для сбора и формирования CSV
Пример кода для экспорта данных конкретной формы (ID = 123) в CSV:
function wpforms_export_to_csv($form_id = 123) {
global $wpdb;
$entries_table = $wpdb->prefix . 'wpforms_entries';
$fields_table = $wpdb->prefix . 'wpforms_entry_fields';
// Получаем записи формы
$entries = $wpdb->get_results($wpdb->prepare(
"SELECT id, date FROM $entries_table WHERE form_id = %d ORDER BY date DESC",
$form_id
));
if(empty($entries)) {
return false; // Нет данных для экспорта
}
// Получаем все поля формы, чтобы заголовки CSV были понятны
$form_fields = wpforms()->form->get($form_id)->fields;
// Заголовок CSV
$csv = [];
$header = ['Entry ID', 'Date'];
foreach ($form_fields as $field) {
$header[] = $field['label'];
}
$csv[] = $header;
foreach ($entries as $entry) {
$row = [$entry->id, $entry->date];
foreach ($form_fields as $field) {
$field_value = $wpdb->get_var($wpdb->prepare(
"SELECT value FROM $fields_table WHERE entry_id = %d AND field_id = %d",
$entry->id, $field['id']
));
$row[] = $field_value;
}
$csv[] = $row;
}
// Формируем CSV строку
$output = '';
foreach ($csv as $line) {
$escaped = array_map(function($item) {
$item = str_replace('"', '""', $item);
return '"' . $item . '"';
}, $line);
$output .= implode(',', $escaped) . "\n";
}
return $output;
}2. Отправка CSV на Email или сохранение на диск
Пример отправки по email с вложением:
function wpforms_send_csv_email() {
$csv_content = wpforms_export_to_csv(123); // ID вашей формы
if(!$csv_content) {
return;
}
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/wpforms_export.csv';
file_put_contents($file_path, $csv_content);
$to = 'admin@example.com';
$subject = 'Экспорт ответов WPForms';
$message = 'В приложении файл с последними ответами формы.';
$headers = ['Content-Type: text/html; charset=UTF-8'];
$attachments = [$file_path];
wp_mail($to, $subject, $message, $headers, $attachments);
// Опционально удаляем файл после отправки
unlink($file_path);
}
// Можно запускать по крону или вручную
add_action('wpforms_cron_export_csv', 'wpforms_send_csv_email');3. Настройка планировщика (wp-cron) для регулярного экспорта
Добавьте хук для автоматического запуска, например, раз в сутки:
if ( ! wp_next_scheduled( 'wpforms_cron_export_csv' ) ) {
wp_schedule_event( time(), 'daily', 'wpforms_cron_export_csv' );
}Проверка результата после внедрения
Чтобы убедиться, что экспорт работает:
- Запустите функцию вручную в админке или через WP-CLI;
- Проверьте, что email с CSV приходит на указанный адрес;
- Откройте CSV, убедитесь, что все поля и записи корректно выгружены;
- Проверьте логи ошибок сервера на предмет ошибок при работе крона или wp_mail.
Частые ошибки и как их исправить
- Пустой CSV или нет данных: Проверьте правильность ID формы и наличие записей в базе.
- Ошибка прав доступа к папке uploads: Убедитесь, что PHP может писать в
wp-content/uploads. - Письма не отправляются: Проверьте настройки SMTP WordPress, убедитесь, что
wp_mailработает через плагин типа WP Mail SMTP. - Крон не срабатывает: Проверьте, активен ли WP-Cron, или используйте системный cron для вызова
wp-cron.php.
Практические советы по производительности и безопасности
- Для больших форм и объёмов данных используйте постраничную загрузку записей, чтобы избежать превышения лимитов памяти и времени выполнения.
- Ограничьте доступ к функции экспорта через capability или проверку прав пользователя.
- Храните CSV во временной папке и удаляйте после отправки, чтобы не занимать место.
- Для надежной отправки писем используйте SMTP-плагины.
Чек-лист для внедрения автоматического экспорта WPForms в CSV
- Определить ID формы для экспорта.
- Реализовать функцию сбора данных из базы и генерации CSV.
- Добавить функцию отправки CSV по email или сохранения на сервер.
- Настроить wp-cron для регулярного запуска экспорта.
- Проверить работу ручным запуском и убедиться в корректности данных.
- Проанализировать логи и исправить возникающие ошибки.
- Обеспечить безопасность и права доступа к функциям экспорта.
Сравнение способов экспорта данных из WPForms
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Ручной экспорт из WPForms (админка) | Выгрузка CSV через интерфейс плагина | Простота, не требует кода | Неудобно при большом объеме и регулярном использовании |
| Автоматический экспорт через PHP и wp-cron | Скрипт собирает данные и отправляет отчет | Гибкость, автоматизация, интеграция с другими системами | Требует навыков программирования, настройки cron |
| Использование сторонних плагинов экспорта | Плагины для экспорта и интеграции с CRM/BI | Быстрое решение без программирования | Может быть дорого, ограничена кастомизация |