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

Диагностика задачи: зачем нужна автоматизация отчётов по продажам WooCommerce

Владельцам интернет-магазинов на WooCommerce часто приходится вручную выгружать данные по продажам для анализа, бухгалтерии или маркетинга. Это занимает время и подвержено ошибкам. Автоматизация позволяет регулярно получать актуальные отчёты без лишних усилий.

Типичные вопросы:

  • Как автоматически собирать данные о продажах за период?
  • Как сохранить отчёт в формате CSV или Excel?
  • Как запускать генерацию отчёта по расписанию?

Пошаговое решение: создание автоматического отчёта о продажах в WooCommerce

1. Получение данных заказов через WP_Query

Для выборки заказов за произвольный период используем класс WC_Order_Query. Пример кода для получения заказов за последний месяц:

function get_monthly_orders() {
    $args = [
        'limit' => -1, // без ограничения
        'status' => ['completed', 'processing'], // учитываем только оплаченные и в обработке
        'date_created' => '>' . ( new DateTime('-1 month') )->format('Y-m-d H:i:s'),
    ];
    $orders = wc_get_orders($args);
    return $orders;
}

2. Формирование CSV файла с ключевыми данными

Создадим CSV с колонками: ID заказа, дата, сумма, статус, клиент (email), список товаров.

function generate_sales_report_csv($orders) {
    $filename = WP_CONTENT_DIR . '/uploads/sales-report-' . date('Y-m-d') . '.csv';
    $file = fopen($filename, 'w');
    fputcsv($file, ['Order ID', 'Date', 'Total', 'Status', 'Customer Email', 'Products']);
    foreach ($orders as $order) {
        $items = [];
        foreach ($order->get_items() as $item) {
            $items[] = $item->get_name() . ' x ' . $item->get_quantity();
        }
        $row = [
            $order->get_id(),
            $order->get_date_created()->date('Y-m-d H:i:s'),
            $order->get_total(),
            $order->get_status(),
            $order->get_billing_email(),
            implode('; ', $items),
        ];
        fputcsv($file, $row);
    }
    fclose($file);
    return $filename;
}

3. Автоматический запуск генерации отчёта по расписанию (WP-Cron)

Добавим событие, которое раз в сутки будет создавать отчёт:

add_action('wp', 'schedule_daily_sales_report');
function schedule_daily_sales_report() {
    if (!wp_next_scheduled('daily_sales_report_event')) {
        wp_schedule_event(time(), 'daily', 'daily_sales_report_event');
    }
}

add_action('daily_sales_report_event', 'daily_sales_report_callback');
function daily_sales_report_callback() {
    $orders = get_monthly_orders();
    $csv_file = generate_sales_report_csv($orders);
    // Здесь можно добавить отправку файла на email или загрузку на FTP
}

Проверка результата после внедрения

Чтобы проверить работу:

  • Вызовите вручную daily_sales_report_callback() через админ-панель с помощью плагина Code Snippets или WP-CLI.
  • Проверьте, что в папке wp-content/uploads/ появился CSV файл с сегодняшней датой.
  • Откройте CSV и убедитесь, что данные соответствуют заказам за последний месяц.
  • Проверьте лог ошибок PHP на предмет сбоев при генерации.

Частые ошибки и как их исправить

  • Ошибка: Нет файлов отчёта после запуска cron.
    Причина: WP-Cron не срабатывает без посещений сайта или неправильный хук.
    Решение: Настройте системный cron для вызова WP-Cron или протестируйте вызов вручную.
  • Ошибка: Пустой CSV файл.
    Причина: Неверно указаны статусы заказов или дата.
    Решение: Проверьте параметры WC_Order_Query, используйте простую выборку без фильтров для теста.
  • Ошибка: Права на запись в папку uploads.
    Решение: Установите права 755 или 775 на папку wp-content/uploads, проверьте пользователя веб-сервера.

Практические советы по безопасности и производительности

  • Не храните отчёты в корне сайта, используйте wp-content/uploads с правильными правами.
  • Для больших магазинов реализуйте пагинацию запросов заказов, чтобы избежать превышения лимитов памяти.
  • Ограничьте доступ к отчётам, например, разместив их за HTTP-аутентификацией или отправляя по email.
  • Если отчёты нужны с разной периодичностью, настройте отдельные cron-события с разными хук-именами.

Сравнение вариантов реализации автоматизированных отчётов WooCommerce

МетодПлюсыМинусыКомментарий
Плагин отчётов (например, WooCommerce Reports)Готовый функционал, нет кодаМало гибкости, нет автоматизации по расписаниюПодходит для новичков
Код на PHP с WC_Order_Query и WP-CronПолный контроль, автоматизация, кастомизацияНужно писать и поддерживать кодРекомендуется для разработчиков
Использование сторонних сервисов или интеграция APIМощные аналитика и визуализацияСложность настройки, возможные расходыДля крупных проектов
⭐⭐⭐⭐⭐