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

Проблема: необходимость регулярной отчетности по продажам в 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 или интеграцииРасширенный анализ, автоматизация, визуализацияСложность настройки, дополнительные затратыКрупные проекты с аналитической командой
Как отправить форму на Telegram из WordPress без плагинов
11.03.2026
Как сделать автоматический откат обновлений WordPress при ошибках
12.01.2026
Автоматическое удаление старых записей в WordPress через WP-Cron
30.03.2026
Как отладить проблемы с производительностью WordPress
08.11.2025
Как создать автоматический импорт PDF-файлов в WordPress
09.04.2026