Диагностика задачи: зачем нужна автоматизация отчетов в WooCommerce
Многие магазины на WooCommerce нуждаются в регулярном анализе продаж, чтобы быстрее принимать решения. Ручная выгрузка отчетов через админку неудобна и занимает время, особенно если нужен отчет в определенном формате и с конкретными фильтрами. Задача — автоматизировать формирование и отправку отчетов о продажах по расписанию.
Пошаговое решение: создание cron-задачи для генерации и отправки отчетов
1. Создаем функцию для сбора данных о продажах
Используем класс WC_Order_Query для выборки заказов за нужный период. Например, отчет за прошедший день.
function wparticles_get_daily_sales_report() {
$date_from = date('Y-m-d 00:00:00', strtotime('yesterday'));
$date_to = date('Y-m-d 23:59:59', strtotime('yesterday'));
$args = [
'limit' => -1,
'status' => ['completed', 'processing'],
'date_created' => $date_from . '...' . $date_to,
];
$orders = wc_get_orders($args);
$total_sales = 0;
$order_count = count($orders);
foreach ($orders as $order) {
$total_sales += $order->get_total();
}
return [
'date' => date('Y-m-d', strtotime('yesterday')),
'order_count' => $order_count,
'total_sales' => $total_sales,
];
}2. Формируем отчет в CSV
function wparticles_generate_csv_report($data) {
$filename = 'sales_report_' . $data['date'] . '.csv';
$csv_content = "Дата,Количество заказов,Общая сумма\n";
$csv_content .= sprintf("%s,%d,%.2f\n", $data['date'], $data['order_count'], $data['total_sales']);
$upload_dir = wp_upload_dir();
$file_path = $upload_dir['basedir'] . '/' . $filename;
file_put_contents($file_path, $csv_content);
return $file_path;
}3. Отправляем отчет по email
function wparticles_send_sales_report($file_path) {
$to = get_option('admin_email');
$subject = 'Ежедневный отчет по продажам WooCommerce';
$message = 'В приложении отчет по продажам за вчерашний день.';
$headers = ['Content-Type: text/html; charset=UTF-8'];
wp_mail($to, $subject, $message, $headers, [$file_path]);
}4. Регистрируем cron-задачу
Добавим задание, которое будет запускаться ежедневно в 8 утра.
add_action('wparticles_daily_sales_report', function() {
$data = wparticles_get_daily_sales_report();
$file = wparticles_generate_csv_report($data);
wparticles_send_sales_report($file);
// Очистка файла после отправки
if (file_exists($file)) {
unlink($file);
}
});
// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('wparticles_daily_sales_report')) {
wp_schedule_event(strtotime('08:00:00'), 'daily', 'wparticles_daily_sales_report');
}Проверка результата после внедрения
- Включите логирование почты (например, через плагин WP Mail Logging) и проверьте, что письмо с отчетом отправляется в 8 утра.
- Проверьте папку uploads, что файл отчета действительно создается и удаляется после отправки.
- Запустите cron задачу вручную через
wp cron event run wparticles_daily_sales_reportв WP-CLI и проверьте результат.
Частые ошибки и их исправление
- Отсутствие запуска cron-задач: WP-Cron запускается только при посещении сайта. Для надежности настройте системный cron на сервере или используйте плагин WP Crontrol для диагностики.
- Несоответствие формата даты в запросах: Убедитесь, что даты в
date_createdзаданы в формате ISO и корректно формируются строки с тремя точками (...), иначе запрос не вернет данные. - Письмо не отправляется: Проверьте настройки SMTP, используйте плагины типа WP Mail SMTP для диагностики.
- Проблемы с правами на запись файлов: Проверьте, что папка uploads доступна для записи PHP.
Практические советы по безопасности и производительности
- Ограничьте права доступа к папке uploads, чтобы CSV-файлы отчетов не были доступны по прямой ссылке.
- Используйте транзиенты или кэш для хранения отчетных данных на случай задержек с отправкой.
- Оптимизируйте запросы
wc_get_orders, не запрашивайте лишние поля, чтобы уменьшить нагрузку при большом количестве заказов. - Для больших магазинов с сотнями заказов в день рассмотрите формирование отчета частями и объединение результата.
Сравнение вариантов автоматизации отчетов
| Подход | Плюсы | Минусы |
|---|---|---|
| Плагин для отчетности (например, WooCommerce Reports) | Готовые отчеты, графики, нет кода | Может быть избыточным, не всегда гибко |
| Самописный cron с wp_mail и wc_get_orders | Полный контроль, автоматизация под задачу | Требует навыков, настройка и отладка |
| Выгрузка через внешние сервисы (BI, Google Sheets) | Мощный анализ, интеграции | Сложная настройка, требует API и синхронизации |