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

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

Почему стоит реализовать импорт заказов без WooCommerce

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

  • Контролировать структуру данных заказов;
  • Избежать избыточных функций WooCommerce;
  • Оптимизировать производительность;
  • Гибко настраивать логику обработки заказов.

Подготовка: создание собственного типа записей для заказов

Для хранения заказов нам нужно создать кастомный тип записей. Это позволит использовать стандартные возможности WordPress для хранения и управления заказами.

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

    $args = [
        'labels' => $labels,
        'public' => false,
        'show_ui' => true,
        'supports' => ['title', 'custom-fields'],
        'capability_type' => 'post',
        'has_archive' => false,
        'menu_position' => 20,
        'menu_icon' => 'dashicons-cart',
    ];

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

Этот код создаст новый тип записей с названием «Заказы», который будет доступен в административной панели для управления.

Формат данных для импорта заказов

Чаще всего импортируют данные из CSV, XML или JSON. Для примера возьмем CSV с такими полями:

  • order_id — уникальный идентификатор заказа
  • customer_name — имя клиента
  • customer_email — email клиента
  • product_sku — артикул товара
  • quantity — количество
  • total_price — итоговая сумма
  • order_date — дата заказа

Такой формат универсален и легко обрабатывается на PHP.

Создаем функцию автоматического импорта из CSV

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

function wporders_import_orders_from_csv($csv_filepath) {
    if (!file_exists($csv_filepath) || !is_readable($csv_filepath)) {
        return new WP_Error('file_error', 'Файл не найден или недоступен');
    }

    $header = null;
    $data = [];

    if (($handle = fopen($csv_filepath, 'r')) !== false) {
        while (($row = fgetcsv($handle, 1000, ',')) !== false) {
            if (!$header) {
                $header = $row;
            } else {
                $data[] = array_combine($header, $row);
            }
        }
        fclose($handle);
    }

    foreach ($data as $order) {
        // Проверяем, существует ли заказ с таким order_id
        $existing = get_posts([
            'post_type' => 'wporders_order',
            'meta_key' => 'order_id',
            'meta_value' => $order['order_id'],
            'post_status' => 'any',
            'numberposts' => 1
        ]);

        if ($existing) {
            // Заказ уже импортирован, пропускаем
            continue;
        }

        // Создаем заказ как запись
        $post_id = wp_insert_post([
            'post_type' => 'wporders_order',
            'post_title' => 'Заказ #' . $order['order_id'] . ' от ' . $order['customer_name'],
            'post_status' => 'publish'
        ]);

        if (is_wp_error($post_id)) {
            continue; // Ошибка при создании
        }

        // Добавляем мета-поля заказа
        update_post_meta($post_id, 'order_id', sanitize_text_field($order['order_id']));
        update_post_meta($post_id, 'customer_name', sanitize_text_field($order['customer_name']));
        update_post_meta($post_id, 'customer_email', sanitize_email($order['customer_email']));
        update_post_meta($post_id, 'product_sku', sanitize_text_field($order['product_sku']));
        update_post_meta($post_id, 'quantity', intval($order['quantity']));
        update_post_meta($post_id, 'total_price', floatval($order['total_price']));
        update_post_meta($post_id, 'order_date', sanitize_text_field($order['order_date']));
    }

    return true;
}

Чтобы запустить импорт, вызовите функцию с путем к CSV файлу, например:

wporders_import_orders_from_csv(WP_CONTENT_DIR . '/uploads/orders.csv');

Организация автоматического запуска импорта через WP-Cron

Чтобы импорт происходил регулярно, например раз в сутки, подключаем нашу функцию к cron:

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

add_action('wporders_daily_import_event', 'wporders_run_import');
function wporders_run_import() {
    $csv_path = WP_CONTENT_DIR . '/uploads/orders.csv';
    wporders_import_orders_from_csv($csv_path);
}

Такой подход позволит не запускать import вручную и гарантировать актуальность заказов.

Расширение функционала: уведомления и отчеты

После импорта полезно добавить уведомления для администратора о новых заказах. Например, отправим письмо с количеством добавленных заказов:

function wporders_import_orders_from_csv($csv_filepath) {
    // ... код импорта
    $imported_count = 0;

    // В цикле добавляем:
    // $imported_count++ после успешного создания заказа

    // В конце функции:
    if ($imported_count > 0) {
        wp_mail(
            get_option('admin_email'),
            'Новые заказы импортированы',
            "Импортировано новых заказов: " . $imported_count
        );
    }

    return true;
}

Также можно создавать административные страницы для просмотра и фильтрации импортированных заказов, используя стандартные возможности WordPress.

Полезные плагины для облегчения импорта и управления заказами

Если хочется сэкономить время, можно использовать готовые решения:

  • WPRemark — удобный плагин для работы с заказами и отзывами, который можно настроить для импорта;
  • ABC Pagination — для удобного отображения большого объема заказов с пагинацией;
  • Плагины для импорта CSV, например, WP All Import, но с кастомной доработкой под ваш тип записей.

Заключение по технической реализации

Импорт заказов в WordPress без WooCommerce — вполне выполнимая задача, если грамотно организовать хранение данных и обработку. Создание собственного типа записей и написание скриптов импорта дают максимальную гибкость и контроль. Рекомендуется тщательно валидировать и фильтровать входящие данные, использовать WP-Cron для автоматизации и добавлять уведомления для мониторинга процесса.

Автоматическое удаление заказов WooCommerce старше 30 дней
28.05.2026
Добавление пользовательских статусов заказов в WooCommerce: подробное руководство с примерами кода
03.04.2026
Как сделать автоматическое сохранение заказов в WordPress без WooCommerce
23.01.2026
Интеграция WordPress с системой управления заказами 1С
27.12.2025
WooCommerce: автоматическое изменение статусов заказов при проблемах с платежами
10.05.2026