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

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

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

Чтобы точно определить проблему, проверьте следующие моменты:

  • Последнее время обновления остатков в WooCommerce и в удалённой системе.
  • Логи ошибок в WooCommerce и серверные логи API-запросов.
  • Корректность настроек cron-задач, отвечающих за синхронизацию.
  • Правильность обработки ответов от удалённого API, особенно статусов ошибок.

Как проверить текущий статус синхронизации

Для оценки актуальности остатков выполните простой запрос к базе WooCommerce:

SELECT product_id, stock_quantity FROM wp_wc_product_meta_lookup WHERE stock_quantity <= 0;

И сравните с данными удалённой системы. Если различия значительные, значит синхронизация работает некорректно.

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

1. Создание cron-задачи для регулярного обновления

Добавьте в functions.php или отдельный плагин код для регистрации события cron и его обработки:

if (!wp_next_scheduled('custom_sync_stock_cron')) {
    wp_schedule_event(time(), 'hourly', 'custom_sync_stock_cron');
}

add_action('custom_sync_stock_cron', 'custom_sync_stock_with_remote');

function custom_sync_stock_with_remote() {
    $products = wc_get_products(array('limit' => -1));
    foreach ($products as $product) {
        $remote_stock = get_remote_stock($product->get_sku());
        if ($remote_stock !== null) {
            $product->set_stock_quantity($remote_stock);
            $product->save();
        }
    }
}

function get_remote_stock($sku) {
    $api_url = 'https://remote.api.example.com/stock?sku=' . urlencode($sku);
    $response = wp_remote_get($api_url, array('timeout' => 10));
    if (is_wp_error($response)) {
        error_log('Ошибка запроса остатка для SKU ' . $sku);
        return null;
    }
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    if (isset($data['stock'])) {
        return intval($data['stock']);
    }
    return null;
}

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

При смене статуса заказа на "Выполнен" нужно отправлять данные о заказе на удалённый склад:

add_action('woocommerce_order_status_completed', 'send_order_to_remote_warehouse', 10, 1);

function send_order_to_remote_warehouse($order_id) {
    $order = wc_get_order($order_id);
    $items = array();
    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        $items[] = [
            'sku' => $product->get_sku(),
            'quantity' => $item->get_quantity(),
        ];
    }
    $data = [
        'order_id' => $order_id,
        'items' => $items,
        'customer' => [
            'email' => $order->get_billing_email(),
            'phone' => $order->get_billing_phone(),
        ],
    ];
    $response = wp_remote_post('https://remote.api.example.com/shipments', [
        'body' => json_encode($data),
        'headers' => [
            'Content-Type' => 'application/json',
            'Authorization' => 'Bearer YOUR_API_TOKEN',
        ],
        'timeout' => 15,
    ]);
    if (is_wp_error($response)) {
        error_log('Ошибка отправки заказа ' . $order_id);
    }
}

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

1. Проверьте логи ошибок (wp-content/debug.log или через error_log) — отсутствие ошибок при cron и API-запросах.

2. Сравните остатки товаров в WooCommerce и удалённой системе через SQL запрос и API.

3. Совершите тестовый заказ, переведите его в статус «Выполнен» и убедитесь, что данные отправились успешно (проверка лога или отклика API).

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

  • Отсутствие cron-задачи: Используйте плагин WP Crontrol для проверки и запуска задач вручную.
  • Неправильный формат данных API: Проверьте документацию API удалённой системы, используйте json_encode/json_decode с флагами.
  • Проблемы с авторизацией: Токен API может истечь — настройте обновление и хранение в защищённых опциях.
  • Проблемы с таймаутом: Увеличьте таймаут в wp_remote_get/wp_remote_post, особенно при большом объёме данных.

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

  • Для API-запросов используйте HTTPS и корректно храните API-ключи в wp-config.php или через add_option с ограниченным доступом.
  • Оптимизируйте количество продуктов в одной синхронизации, чтобы не перегружать сервер (пагинация или пакетная обработка).
  • Добавьте обработку ошибок и повторные попытки при неудачных запросах с экспоненциальной задержкой.
  • Отключите вывод ошибок в продакшене, чтобы не раскрывать детали реализации.

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

МетодПреимуществаНедостаткиПример
WP Cron + wp_remote_get/postГибкость, полный контроль, без сторонних плагиновЗависит от посещаемости сайта, требует отладкиКод выше
Плагины синхронизации (например WP All Import)Простота настройки, визуальный интерфейсОграниченная кастомизация, стоимостьClearfy Pro (есть модули для SEO и оптимизации, но не для складской синхронизации)
Как создать динамические настройки темы WordPress с использованием Customizer API
14.12.2025
WooCommerce: автоматическая удалённая отгрузка и синхронизация остатков товаров
24.05.2026
Создание динамического фильтрованного списка постов в WordPress
28.02.2026
Как создать отзывы с фотографиями в WordPress
30.01.2026
Как увеличить PHP memory_limit в WordPress для стабильной работы сайта
09.12.2025