Диагностика задачи: зачем нужна автоматизация отчётов по продажам 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 | Мощные аналитика и визуализация | Сложность настройки, возможные расходы | Для крупных проектов |