Как сделать автоматическое создание отчета по заказам в WordPress без WooCommerce

В этой статье рассмотрим, как реализовать функционал автоматического создания отчетов по заказам в WordPress без использования WooCommerce. Такой подход будет полезен для сайтов, где заказы ведутся на базе кастомных типов записей или плагинов, отличных от WooCommerce.

Почему нужен автоматический отчет по заказам в WordPress

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

В статье мы покажем, как на базе собственного кастомного типа записей реализовать логику сбора данных и формирование отчетов, а также настроить планировщик задач для периодического создания файла с отчетом.

Создание кастомного типа записей для заказов

Для начала создадим тип записей, который будет хранить заказы. В functions.php вашей темы или в отдельном плагине добавьте следующий код:

function wporders_register_post_type_orders() {
    $labels = array(
        'name' => 'Заказы',
        'singular_name' => 'Заказ',
        'add_new' => 'Добавить заказ',
        'add_new_item' => 'Добавить новый заказ',
        'edit_item' => 'Редактировать заказ',
        'new_item' => 'Новый заказ',
        'view_item' => 'Посмотреть заказ',
        'search_items' => 'Поиск заказов',
        'not_found' => 'Заказы не найдены',
        'not_found_in_trash' => 'Заказы не найдены в корзине',
    );

    $args = array(
        'labels' => $labels,
        'public' => false,
        'show_ui' => true,
        'supports' => array('title', 'custom-fields'),
        'has_archive' => false,
    );

    register_post_type('wporders_order', $args);
}
add_action('init', 'wporders_register_post_type_orders');

Этот код создаст тип записей wporders_order, который мы будем использовать для добавления заказов. В качестве минимального набора поддерживаются заголовок и пользовательские поля.

Структура данных заказа и хранение мета-полей

Для каждого заказа важно хранить такие данные, как дата, сумма, статус, информация о покупателе. Их лучше хранить в мета-полях записи. Например:

  • order_date — дата создания заказа
  • order_amount — сумма заказа
  • order_status — статус (в обработке, завершен, отменен)
  • customer_name — имя покупателя
  • customer_email — email покупателя

Добавление и редактирование этих полей можно реализовать с помощью мета-боксов или плагинов типа Advanced Custom Fields, но в статье сосредоточимся на автоматическом отчете.

Функция создания отчета по заказам

Теперь перейдем к созданию функции, которая соберет заказы за определенный период и сформирует CSV-файл с отчетом.

function wporders_generate_orders_report($start_date, $end_date) {
    // Формат даты в meta_query - timestamp
    $args = array(
        'post_type' => 'wporders_order',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => 'order_date',
                'value' => array($start_date, $end_date),
                'compare' => 'BETWEEN',
                'type' => 'NUMERIC'
            )
        )
    );

    $orders_query = new WP_Query($args);
    if (!$orders_query->have_posts()) {
        return false; // Нет заказов за период
    }

    $filename = 'orders_report_' . date('Ymd_His') . '.csv';
    $filepath = WP_CONTENT_DIR . '/uploads/' . $filename;

    $file = fopen($filepath, 'w');
    if (!$file) {
        return false;
    }

    // Заголовки CSV
    fputcsv($file, array('ID', 'Дата', 'Сумма', 'Статус', 'Имя клиента', 'Email клиента'));

    while ($orders_query->have_posts()) {
        $orders_query->the_post();
        $order_id = get_the_ID();
        $order_date = get_post_meta($order_id, 'order_date', true);
        $order_amount = get_post_meta($order_id, 'order_amount', true);
        $order_status = get_post_meta($order_id, 'order_status', true);
        $customer_name = get_post_meta($order_id, 'customer_name', true);
        $customer_email = get_post_meta($order_id, 'customer_email', true);

        // Форматируем дату из timestamp
        $order_date_formatted = date('Y-m-d H:i:s', $order_date);

        fputcsv($file, array($order_id, $order_date_formatted, $order_amount, $order_status, $customer_name, $customer_email));
    }

    fclose($file);
    wp_reset_postdata();

    return $filepath;
}

Функция принимает две даты в формате timestamp, выбирает заказы с датой в этом диапазоне и формирует CSV-файл с отчетом. Файл сохраняется в папку uploads.

Автоматизация создания отчета через WP-Cron

Чтобы отчет создавался регулярно, например, каждый день, настроим задачу WP-Cron.

function wporders_schedule_daily_report() {
    if (!wp_next_scheduled('wporders_daily_report_event')) {
        wp_schedule_event(strtotime('00:00:00'), 'daily', 'wporders_daily_report_event');
    }
}
add_action('wp', 'wporders_schedule_daily_report');

function wporders_daily_report_callback() {
    $yesterday_start = strtotime('yesterday 00:00:00');
    $yesterday_end = strtotime('yesterday 23:59:59');
    $report_path = wporders_generate_orders_report($yesterday_start, $yesterday_end);

    if ($report_path) {
        // Здесь можно реализовать отправку отчета по email или загрузку на сервер
    }
}
add_action('wporders_daily_report_event', 'wporders_daily_report_callback');

Этот код запустит функцию генерации отчета в полночь за предыдущий день. При необходимости можно добавить отправку файла на email или в облачное хранилище.

Пример отправки отчета по email

Для удобства можно отправлять отчет автоматически на почту менеджера. Для этого расширим функцию обратного вызова:

function wporders_daily_report_callback() {
    $yesterday_start = strtotime('yesterday 00:00:00');
    $yesterday_end = strtotime('yesterday 23:59:59');
    $report_path = wporders_generate_orders_report($yesterday_start, $yesterday_end);

    if ($report_path && file_exists($report_path)) {
        $to = 'manager@example.com';
        $subject = 'Отчет по заказам за вчера';
        $message = 'В приложении находится отчет по заказам за вчерашний день.';
        $headers = array('Content-Type: text/html; charset=UTF-8');
        $attachments = array($report_path);

        wp_mail($to, $subject, $message, $headers, $attachments);
    }
}

Не забудьте заменить manager@example.com на реальный адрес. Этот пример использует стандартную функцию WordPress wp_mail для отправки письма с прикрепленным отчетом.

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

Создавая автоматические отчеты, учитывайте несколько важных моментов:

  • Ограничьте права доступа к отчетам. Храните их в защищенной папке и не давайте прямых ссылок без авторизации.
  • Оптимизируйте выборку данных. При большом количестве заказов используйте пагинацию или выборки по частям.
  • Очистка старых файлов. Реализуйте удаление устаревших отчетов для экономии места.
  • Обработка ошибок. Добавьте логирование ошибок создания и отправки отчетов, чтобы оперативно реагировать на проблемы.

Заключение

Мы рассмотрели, как создать автоматическое формирование отчетов по заказам в WordPress без WooCommerce с помощью кастомного типа записей, мета-полей, WP_Query и WP-Cron. Такой подход гибок и легко настраивается под любые задачи.

Если вы используете на сайте плагины для работы с заказами, например, WPRemark для управления комментариями к заказам или ABC Pagination для удобного вывода списков заказов, можно интегрировать отчетность с этими инструментами.

Как добавить автоматический импорт заказов в WordPress без WooCommerce
19.03.2026
Автоматическое удаление заказов WooCommerce старше 30 дней
28.05.2026
Как создать автоматический скрипт для обновления статусов заказов WooCommerce
09.02.2026
Как сделать автоматическое создание отчета по заказам в WordPress без WooCommerce
24.02.2026
Добавление промежуточного статуса заказа в WooCommerce: пошаговое руководство
16.03.2026