Диагностика задачи: зачем автоматизировать отчет по опросам
Владельцы сайтов на WordPress с опросами часто нуждаются в оперативных отчетах для анализа результатов и быстрой реакции на изменения. Ручной экспорт данных или просмотр результатов в админке неудобны, особенно при большом объеме голосов. Автоматизация с помощью хуков WordPress и плагинов опросов позволяет формировать и отправлять отчеты без участия администратора.
Пошаговое решение: настройка автоматического отчета через хуки
1. Выбор подходящего плагина с хуками
Для примера возьмем плагин WP-Polls — популярный, с открытым API и хуками. Если у вас другой плагин, проверьте документацию на наличие экшенов и фильтров для обработки голосов.
2. Создание функции для генерации отчета
Функция собирает результаты опроса по ID, форматирует их и отправляет на email.
function wppolls_generate_report($poll_id) {
global $wpdb;
// Таблица голосов WP-Polls
$table_votes = $wpdb->prefix . 'pollsq_votes';
$table_answers = $wpdb->prefix . 'pollsq_answers';
// Получаем вопросы и ответы опроса
$answers = $wpdb->get_results($wpdb->prepare(
"SELECT awid, answer_text FROM $table_answers WHERE poll_id = %d", $poll_id
), ARRAY_A);
// Получаем количество голосов по каждому ответу
$votes_count = [];
foreach ($answers as $answer) {
$votes = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM $table_votes WHERE awid = %d", $answer['awid']
));
$votes_count[$answer['answer_text']] = intval($votes);
}
// Формируем текст отчета
$report = "Отчет по опросу ID {$poll_id}:\n";
foreach ($votes_count as $answer_text => $count) {
$report .= "- {$answer_text}: {$count} голосов\n";
}
return $report;
}3. Автоматический вызов функции при новом голосе с помощью хука
WP-Polls имеет экшен poll_vote_added, вызываемый после добавления голоса. Используем его для отправки отчета.
function wppolls_send_report_after_vote($poll_id) {
$report = wppolls_generate_report($poll_id);
$to = 'admin@example.com'; // замените на нужный email
$subject = "Новый отчет по опросу #{$poll_id}";
wp_mail($to, $subject, $report);
}
add_action('poll_vote_added', 'wppolls_send_report_after_vote');Проверка результата после внедрения
- Проголосуйте в любом опросе на сайте.
- Проверьте почту, указанную в функции
wppolls_send_report_after_vote. Должно прийти письмо с отчетом по текущему состоянию опроса. - Убедитесь, что структура письма соответствует ожидаемой: список вариантов и количество голосов.
- Просмотрите логи почтового сервера на предмет ошибок, если письмо не пришло.
Частые ошибки и как исправить
- Письма не отправляются: проверьте, работает ли функция
wp_mailна вашем хостинге. Можно использовать плагин WP Mail SMTP для диагностики. - Плохое форматирование отчета: убедитесь, что в базе данных нет поврежденных данных, и что функции форматируют строки корректно.
- Хук
poll_vote_addedне срабатывает: убедитесь, что используемый плагин поддерживает этот экшен и он не переопределен в вашей теме или другом плагине. - Отправка отчета слишком частая: если голосов много, можно добавить ограничение по времени — отправлять отчет раз в N минут с помощью транзиентов WordPress.
Практические советы по безопасности и производительности
- Используйте
wp_mailс корректным заголовкомFrom, чтобы письма не попадали в спам. - Для больших сайтов с интенсивным голосованием избегайте отправки письма на каждый голос — лучше агрегировать данные и отправлять раз в час или день.
- Храните ID опросов в настройках, если хотите массово генерировать отчеты для нескольких опросов.
- Для более сложных отчетов используйте сторонние библиотеки для генерации PDF или Excel, но помните про нагрузку на сервер.
Сравнение способов автоматизации отчетов по опросам в WordPress
| Метод | Плюсы | Минусы |
|---|---|---|
| Использование хуков плагина (пример WP-Polls) | Автоматизация при каждом голосе, простота реализации | Высокая нагрузка при частом голосовании, зависит от плагина |
| Периодический WP-Cron с генерацией отчета | Контроль частоты отчетов, меньшая нагрузка | Сложнее реализовать, задержка в обновлении данных |
| Внешние сервисы и интеграции (Zapier, Integromat) | Гибкость, возможность сложной аналитики | Зависимость от сторонних сервисов, дополнительные расходы |