Автоматический импорт заказов в WooCommerce — полезная функция для интернет-магазинов с внешними системами учета, маркетплейсами или CRM. В этой статье расскажу, как создать собственный механизм импорта заказов из CSV-файлов или API, а также приведу примеры кода и рекомендации по плагинам для автоматизации.
Почему нужен автоматический импорт заказов в WooCommerce
Многие магазины получают заказы не только с сайта, но и с маркетплейсов, call-центров или сторонних сервисов. Чтобы не вводить их вручную, удобно автоматизировать импорт в WooCommerce. Это сокращает время обработки, снижает ошибки и повышает эффективность работы.
Типичные кейсы:
- Импорт заказов из CRM-системы по расписанию
- Импорт заказов из маркетплейсов, которые выгружают CSV или JSON
- Объединение заказов из нескольких источников в WooCommerce
Инструменты и плагины для импорта заказов
Для начала рассмотрим готовые решения, которые можно использовать или взять за основу.
- WP Export Import — мощный плагин для импорта и экспорта заказов, клиентов и товаров. Поддерживает CSV, XML, планировщик задач.
- Clearfy Pro — оптимизация и автоматизация WooCommerce, есть функции для импорта и очистки данных.
- WooCommerce REST API — стандартный инструмент для интеграции и импорта заказов через HTTP-запросы.
Если нужен кастомный импорт, лучше написать собственный скрипт на PHP с использованием хуков WooCommerce и WPUnit.
Как написать автоматический импорт заказов из CSV в WooCommerce: пример кода
Рассмотрим пример функции для импорта заказов из CSV с основными полями. Код можно поместить в отдельный плагин или в functions.php темы.
function wpunit_import_orders_from_csv($csv_file_path) {
if (!file_exists($csv_file_path)) {
error_log('CSV файл не найден: ' . $csv_file_path);
return;
}
if (($handle = fopen($csv_file_path, 'r')) !== false) {
$header = fgetcsv($handle, 1000, ',');
while (($data = fgetcsv($handle, 1000, ',')) !== false) {
$row = array_combine($header, $data);
// Создаем заказ
$order = wc_create_order();
$order->set_billing_email($row['billing_email']);
$order->set_billing_first_name($row['billing_first_name']);
$order->set_billing_last_name($row['billing_last_name']);
$order->set_billing_address_1($row['billing_address_1']);
$order->set_payment_method($row['payment_method']);
$order->set_status('processing');
// Добавляем товары
$items = json_decode($row['items'], true); // Ожидаем JSON с товарами [{"product_id":123,"quantity":2}, ...]
if ($items) {
foreach ($items as $item) {
$product = wc_get_product($item['product_id']);
if ($product) {
$order->add_product($product, $item['quantity']);
}
}
}
$order->calculate_totals();
$order->save();
}
fclose($handle);
}
}Важно: формат CSV должен быть согласован, например, колонка items содержит JSON-массив товаров с ID и количеством. Такой подход универсален и расширяем.
Запуск импорта по расписанию с WP-Cron
Чтобы импорт происходил автоматически, можно запланировать задачу с помощью WP-Cron:
function wpunit_schedule_import() {
if (!wp_next_scheduled('wpunit_import_orders_event')) {
wp_schedule_event(time(), 'hourly', 'wpunit_import_orders_event');
}
}
add_action('wp', 'wpunit_schedule_import');
add_action('wpunit_import_orders_event', function() {
wpunit_import_orders_from_csv(ABSPATH . 'wp-content/uploads/orders_import.csv');
});Так импорт будет запускаться каждый час, проверяя и добавляя новые заказы из файла.
Импорт заказов через WooCommerce REST API
Если заказы приходят из внешней системы, которая поддерживает API, можно принимать их через REST API WooCommerce. Вот пример как создать заказ через запрос:
POST /wp-json/wc/v3/orders
{
"payment_method": "bacs",
"payment_method_title": "Direct Bank Transfer",
"set_paid": true,
"billing": {
"first_name": "Иван",
"last_name": "Иванов",
"email": "ivan@example.com"
},
"line_items": [
{
"product_id": 93,
"quantity": 2
}
]
}Для автоматизации можно написать PHP-скрипт, который будет принимать или запрашивать такие данные и создавать заказы программно.
Пример создания заказа через PHP с использованием REST API клиента
function wpunit_create_order_via_api($order_data) {
$woocommerce = new Automattic\WooCommerce\Client(
'https://example.com',
'consumer_key',
'consumer_secret',
['version' => 'wc/v3']
);
try {
$order = $woocommerce->post('orders', $order_data);
return $order;
} catch (Exception $e) {
error_log('Ошибка создания заказа: ' . $e->getMessage());
return false;
}
}Рекомендации по безопасности и производительности
При автоматическом импорте важно учитывать безопасность:
- Проверять и валидировать входные данные
- Ограничивать доступ к файлам и API ключам
- Обрабатывать ошибки и логировать их
- Использовать транзакции, если работаете с базой напрямую
По производительности рекомендуется:
- Обрабатывать импорт пакетами, чтобы не перегружать сервер
- Использовать планировщик WP-Cron с разумным интервалом
- Кэшировать частые запросы по необходимости
Выводы и полезные ссылки
Автоматический импорт заказов в WooCommerce позволяет оптимизировать работу интернет-магазина и интегрироваться с внешними системами. Выбор между готовыми плагинами и собственными разработками зависит от конкретных задач и ресурсов.
Рекомендую ознакомиться с плагином WP Export Import для быстрого старта и использовать приведенные примеры кода как основу для кастомных решений.