Как добавить автоматическую сборку отчетов по продажам WooCommerce

Диагностика задачи: зачем нужна автоматизация отчетов в 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 и синхронизации
Как добавить пользовательские поля в WordPress без плагинов
10.01.2026
Как избежать конфликтов между плагинами WordPress: практические решения
11.03.2026
Как избежать конфликтов между WooCommerce и кассовыми системами
22.04.2026
Как добавить кастомные типы постов в WordPress
26.11.2025
Как использовать хуки WooCommerce для добавления пользовательского функционала
26.12.2025

Ниже мы подобрали самые актуальные материалы по Вордпресс