Проблема: необходимость регулярной отчетности по продажам в WooCommerce
Многие владельцы интернет-магазинов на WooCommerce сталкиваются с задачей периодического получения отчетов по продажам для анализа бизнеса, учета и принятия решений. Ручное формирование отчетов через админку неудобно и требует времени. Автоматизация сбора и отправки отчетов на почту решит эту проблему.
Диагностика текущей ситуации
Для начала проверьте, как вы сейчас получаете отчеты:
- Отсутствует ли автоматическая рассылка отчетов?
- Как часто и в каком формате нужны отчеты?
- Есть ли требования к содержанию: продажи за день, неделю, месяц, по категориям, по товарам?
- Используете ли вы сторонние плагины для отчетности или выгружаете данные вручную?
Если автоматизации нет или она неудобна, переходим к решению.
Пошаговое решение: автоматическая отправка отчета продаж по расписанию с помощью WP-Cron
1. Создаем функцию для генерации отчета
Отчет будет формироваться в формате CSV и содержать данные по заказам за последний день.
function generate_woocommerce_sales_report() {
$date_from = (new DateTime('yesterday'))->setTime(0, 0, 0)->format('Y-m-d H:i:s');
$date_to = (new DateTime('yesterday'))->setTime(23, 59, 59)->format('Y-m-d H:i:s');
$args = [
'limit' => -1,
'status' => ['completed', 'processing'],
'date_created' => $date_from . '...' . $date_to,
];
$orders = wc_get_orders($args);
if (empty($orders)) {
return false; // Нет заказов за период
}
$csv = "Order ID,Date,Customer,Total\n";
foreach ($orders as $order) {
$csv .= sprintf(
"%d,%s,%s,%.2f\n",
$order->get_id(),
$order->get_date_created()->date('Y-m-d H:i:s'),
$order->get_billing_email() ?: $order->get_billing_first_name() . ' ' . $order->get_billing_last_name(),
$order->get_total()
);
}
return $csv;
}2. Создаем функцию для отправки отчета на email
function send_woocommerce_sales_report_email() {
$csv = generate_woocommerce_sales_report();
if (!$csv) {
return; // Нет данных для отправки
}
$to = get_option('admin_email');
$subject = 'Ежедневный отчет продаж WooCommerce за ' . (new DateTime('yesterday'))->format('Y-m-d');
$headers = ['Content-Type: text/plain; charset=UTF-8'];
$attachments = [];
// Сохраняем CSV во временный файл
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/woocommerce-sales-report-' . date('Y-m-d', strtotime('yesterday')) . '.csv';
file_put_contents($file_path, $csv);
$attachments[] = $file_path;
wp_mail($to, $subject, 'В приложении отчет по продажам за вчерашний день.', $headers, $attachments);
// Удаляем временный файл
unlink($file_path);
}3. Регистрируем WP-Cron событие для ежедневной отправки
function register_daily_sales_report_event() {
if (!wp_next_scheduled('daily_woocommerce_sales_report')) {
wp_schedule_event(strtotime('tomorrow 08:00'), 'daily', 'daily_woocommerce_sales_report');
}
}
add_action('wp', 'register_daily_sales_report_event');
add_action('daily_woocommerce_sales_report', 'send_woocommerce_sales_report_email');Проверка результата после внедрения
- Убедитесь, что в разделе «Инструменты» → «Запланированные задачи» (если установлен плагин WP Crontrol) появилось событие
daily_woocommerce_sales_report. - Подождите до следующего запуска или вручную вызовите функцию
send_woocommerce_sales_report_email()черезwp shellили с временным вызовом в теме. - Проверьте почту администратора на наличие письма с CSV-файлом и корректными данными.
- В случае отсутствия писем проверьте настройки почты WordPress и логи ошибок.
Частые ошибки и как их исправить
- Отсутствие писем на почту: Проверьте, работает ли функция
wp_mail(). Используйте плагин для SMTP или тест отправки почты. - Отчет пустой: Убедитесь, что за указанный период есть заказы со статусом
completedилиprocessing. Проверьте правильность формата дат. - Задача WP-Cron не запускается: Если сайт мало посещаемый, WP-Cron может не срабатывать. Настройте системный cron на сервере для запуска
wp-cron.phpили используйте плагин WP Crontrol для принудительного запуска. - Ошибка записи файла CSV: Проверьте права на папку загрузок (
wp-content/uploads), чтобы PHP мог создавать и удалять файлы.
Практические советы по безопасности и производительности
- Не храните CSV-файлы на сервере длительное время. Удаляйте временные файлы после отправки, чтобы не засорять дисковое пространство.
- Ограничьте объем данных в отчете, чтобы избежать большого потребления памяти и времени выполнения. Например, используйте постраничный вывод или срез по датам.
- Используйте SMTP-сервисы и плагин WP Mail SMTP для надежной отправки писем и уменьшения риска попадания писем в спам.
- Для больших магазинов с большим объемом заказов рассмотрите генерацию отчетов в фоне через WP CLI или внешние cron-задачи.
Сравнение способов автоматизации отчетности
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| WP-Cron + кастомный код | Полный контроль, бесплатное решение, гибкость | Зависит от активности сайта, требует навыков программирования | Средние и крупные магазины с доступом к коду |
| Плагин для отчетов (например, WooCommerce PDF Invoices) | Простота, готовые шаблоны, поддержка | Может быть платным, менее гибкий | Малые магазины, пользователи без навыков кода |
| Внешние сервисы BI или интеграции | Расширенный анализ, автоматизация, визуализация | Сложность настройки, дополнительные затраты | Крупные проекты с аналитической командой |