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

Диагностика проблемы с удалённой отгрузкой и синхронизацией остатков

В крупных интернет-магазинах на WooCommerce часто возникает необходимость автоматизировать процесс удалённой отгрузки товаров и синхронизации остатков с внешними системами — складом, ERP или поставщиками. Распространённые симптомы проблем при этом:

  • Остатки товаров не обновляются своевременно или некорректно;
  • Заказы не передаются в систему отгрузки или передаются с задержкой;
  • Происходит рассинхронизация остатков между WooCommerce и складом;
  • На сайте остаются товары с нулевым остатком, что ведёт к ошибкам продаж.

Для диагностики стоит проверить логирование запросов на API внешних систем, статус cron-задач WooCommerce и наличие ошибок в логах сервера.

Пошаговое решение: настройка автоматической удалённой отгрузки и синхронизации остатков

1. Настройка cron-задач для регулярного обновления остатков

WooCommerce не имеет встроенных инструментов для синхронизации с внешними системами, поэтому требуется написать собственный скрипт и запускать его по cron. Пример простого скрипта, который получает остатки из API склада и обновляет их в WooCommerce:

function update_woocommerce_stock() {
    $api_url = 'https://example-warehouse.com/api/stock';
    $response = wp_remote_get($api_url);
    if (is_wp_error($response)) {
        error_log('Ошибка получения остатков: ' . $response->get_error_message());
        return;
    }
    $stock_data = json_decode(wp_remote_retrieve_body($response), true);
    if (!is_array($stock_data)) {
        error_log('Неверный формат данных остатков');
        return;
    }
    foreach ($stock_data as $sku => $qty) {
        $product_id = wc_get_product_id_by_sku($sku);
        if ($product_id) {
            $product = wc_get_product($product_id);
            $product->set_stock_quantity((int) $qty);
            $product->save();
        }
    }
}
// Создаём cron-задачу, если её нет
add_action('wp', function() {
    if (!wp_next_scheduled('update_stock_cron_hook')) {
        wp_schedule_event(time(), 'hourly', 'update_stock_cron_hook');
    }
});
add_action('update_stock_cron_hook', 'update_woocommerce_stock');

2. Автоматическая отгрузка заказов через API

Для передачи информации о заказах в удалённую систему можно использовать хук woocommerce_order_status_completed, который срабатывает при смене статуса заказа на «Завершён». Пример отправки данных заказа в API:

add_action('woocommerce_order_status_completed', 'send_order_to_warehouse', 10, 1);
function send_order_to_warehouse($order_id) {
    $order = wc_get_order($order_id);
    $items = [];
    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        $items[] = [
            'sku' => $product->get_sku(),
            'quantity' => $item->get_quantity(),
        ];
    }
    $payload = [
        'order_id' => $order->get_id(),
        'items' => $items,
        'customer' => [
            'email' => $order->get_billing_email(),
            'phone' => $order->get_billing_phone(),
        ],
    ];
    $response = wp_remote_post('https://example-warehouse.com/api/orders', [
        'headers' => ['Content-Type' => 'application/json'],
        'body' => json_encode($payload),
    ]);
    if (is_wp_error($response)) {
        error_log('Ошибка отправки заказа: ' . $response->get_error_message());
    }
}

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

  • Проверить в логах WordPress (wp-content/debug.log) отсутствие ошибок при обновлении остатков и отправке заказов;
  • Убедиться, что остатки товаров в WooCommerce совпадают с данными из API склада;
  • Проверить, что при смене статуса заказа на «Завершён» данные отправляются во внешнюю систему (можно временно включить логирование запросов);
  • Провести тестовый заказ и проследить весь цикл от оформления до отгрузки.

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

  • Отсутствие cron-задачи: проверьте, что wp-cron работает и запланированное событие действительно запускается (используйте плагин WP Crontrol для диагностики);
  • Ошибка авторизации в API: убедитесь, что для внешнего API передаются необходимые ключи или токены, и они корректны;
  • Некорректный SKU: SKU в WooCommerce должен совпадать с тем, что используется в API склада, иначе обновления не найдут товар;
  • Проблемы с памятью или тайм-ауты: если обновление больших объёмов данных вызывает ошибки, разбейте процесс на части или используйте WP CLI для запуска скриптов;
  • Отсутствие реакции на изменение статуса заказа: проверьте, что хук woocommerce_order_status_completed срабатывает, и нет конфликтов с другими плагинами.

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

  • Используйте nonce и авторизацию при работе с внешними API для предотвращения несанкционированного доступа;
  • Для больших магазинов лучше использовать WP CLI для запуска синхронизации — это снизит нагрузку на веб-сервер;
  • Логируйте ошибки и успешные операции в отдельный файл, чтобы быстро выявлять сбои;
  • Оптимизируйте запросы к базе, обновляя только изменённые остатки, чтобы минимизировать нагрузку;
  • Используйте транзиенты или кеширование для хранения данных между запросами, если API медленный;
  • Проверяйте размер пакетов данных при отправке заказов, чтобы избежать таймаутов и превышения лимитов сервера.

Сравнение способов реализации синхронизации остатков

СпособПлюсыМинусыКогда использовать
WP Cron + PHP скриптПростота реализации, стандартные инструментыЗависит от посещаемости сайта, возможны задержкиМалые и средние магазины
WP CLI скрипты по cronНезависимость от посещаемости, высокая стабильностьТребует доступа к серверу и навыков работы с CLIБольшие магазины с большим объемом данных
Плагин интеграции (готовый)Быстрый старт, поддержка разработчиковМожет быть дорогим, ограниченная кастомизацияЕсли есть подходящий плагин и бюджет
Как избежать проблем с разрешениями файлов в WordPress
30.03.2026
WooCommerce: автоматическая удалённая отгрузка и синхронизация остатков товаров
08.05.2026
Как обязать пользователей подтверждать email в WordPress при регистрации
05.04.2026
WooCommerce: автоматическое удаление зависших вариаций товаров
31.05.2026
Отладка выполнения AJAX-запросов в WordPress
04.12.2025