WooCommerce: автоматическое обновление остатков товаров в реальном времени

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

В интернет-магазинах на WooCommerce часто возникает ситуация, когда остатки товаров не обновляются вовремя, особенно при частых заказах или если склад ведется в сторонней системе. Это приводит к проблемам: покупатели видят неверную информацию, заказы оформляются на отсутствующий товар, что ведет к отменам и негативу.

Основные симптомы проблемы:

  • Остатки в админке и на сайте не совпадают.
  • Заказы оформляются на товары с нулевым или отрицательным остатком.
  • Интеграция с 1С или другими системами не обновляет склад.

Перед решением проблемы важно проверить, как именно у вас ведется учет остатков и как WooCommerce получает эти данные.

Пошаговое решение: автоматическое обновление остатков в реальном времени

1. Проверка и настройка управления запасами в WooCommerce

Перейдите в WooCommerce > Настройки > Товары > Запасы. Убедитесь, что опция Включить управление запасами активирована. Это обязательный шаг для работы со складом на уровне WooCommerce.

2. Использование AJAX для обновления остатков на клиенте

Для динамического обновления количества на страницах каталога и карточках товара без перезагрузки можно добавить обработчик AJAX, который будет запрашивать актуальный остаток из базы.

add_action('wp_ajax_get_product_stock', 'get_product_stock_callback');
add_action('wp_ajax_nopriv_get_product_stock', 'get_product_stock_callback');

function get_product_stock_callback() {
    $product_id = intval($_POST['product_id']);
    if (!$product_id) {
        wp_send_json_error('No product ID');
        wp_die();
    }
    $product = wc_get_product($product_id);
    if (!$product) {
        wp_send_json_error('Product not found');
        wp_die();
    }
    $stock_quantity = $product->get_stock_quantity();
    wp_send_json_success(['stock' => $stock_quantity]);
    wp_die();
}

На фронтенде через JavaScript запускайте AJAX-запрос при изменении параметров или периодически для обновления остатка.

3. Автоматическая синхронизация с внешними системами через WP-Cron

Если склад ведется в 1С или другой ERP, настройте механизмы импорта данных в WooCommerce. Для этого можно создать кастомный WP-Cron, который будет запускать функцию обновления остатков из CSV, JSON или API.

add_action('wp_ajax_update_stock_from_external', 'update_stock_from_external');
add_action('wp_ajax_nopriv_update_stock_from_external', 'update_stock_from_external');

function update_stock_from_external() {
    // Пример: получение данных из внешнего API
    $response = wp_remote_get('https://example.com/api/stock');
    if (is_wp_error($response)) {
        wp_send_json_error('API error');
        wp_die();
    }
    $data = json_decode(wp_remote_retrieve_body($response), true);
    if (empty($data)) {
        wp_send_json_error('Empty data');
        wp_die();
    }

    foreach ($data as $item) {
        $product_id = wc_get_product_id_by_sku($item['sku']);
        if (!$product_id) continue;
        $product = wc_get_product($product_id);
        $product->set_stock_quantity(intval($item['stock']));
        $product->save();
    }
    wp_send_json_success('Stock updated');
    wp_die();
}

Для периодического запуска зарегистрируйте WP-Cron событие в functions.php:

if (!wp_next_scheduled('update_stock_hourly_event')) {
    wp_schedule_event(time(), 'hourly', 'update_stock_hourly_event');
}
add_action('update_stock_hourly_event', 'update_stock_from_external');

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

  • Оформите заказ на товар и проверьте, что остаток сразу уменьшается.
  • Сделайте прямой запрос AJAX к обработчику get_product_stock с ID товара, убедитесь, что возвращается актуальное количество.
  • Запустите вручную функцию синхронизации и проверьте, что остатки обновились согласно внешним данным.
  • В админке WooCommerce проверьте, что значения остатков совпадают с фактическими.

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

  • Неактивен WP-Cron: автоматические задачи не выполняются. Проверьте wp-config.php на DISABLE_WP_CRON и настройте системный cron для вызова wp-cron.php.
  • Неверный product ID в AJAX: ошибка запроса. Убедитесь, что ID передается корректно и продукт существует.
  • Кэширование страниц: мешает обновлению остатков в реальном времени. Отключите кэширование для страниц с товарами или используйте AJAX.
  • Отсутствие управления запасами: если в настройках WooCommerce отключено управление запасами, остатки не обновятся.

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

  • Все AJAX-обработчики должны проверять nonce и права пользователя, чтобы избежать несанкционированных запросов.
  • Ограничьте частоту обновлений через AJAX, чтобы не перегружать сервер.
  • При синхронизации с внешними сервисами используйте кеширование и incremental updates (обновляйте только изменившиеся позиции).
  • Для больших каталогов и частых обновлений рассмотрите использование очередей (WP Queue или внешние cron).

Сравнение способов обновления остатков

МетодПлюсыМинусы
Ручное обновление в админкеПростота, не требует кодаНеэффективно при большом количестве товаров, риск ошибок
WP-Cron + внешний APIАвтоматизация, синхронизация с ERPЗависимость от внешних систем, настройка cron
AJAX обновление остатков на фронтеОбновление без перезагрузки, улучшенный UXНагрузка на сервер при частых запросах
WooCommerce: автоматический обзвон покупателей после оформления заказа
16.05.2026
WooCommerce: не работают кнопки «Купить» после обновления — как исправить
28.05.2026
Как сделать уникальные URL для товаров в WooCommerce без дублирования
18.12.2025
Как создать адаптивную тему WordPress на Flexbox
15.12.2025
Как очистить базу данных WordPress от старых meta данных и оптимизировать сайт
13.03.2026