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

Проблема: устаревшие остатки товаров в WooCommerce при интеграции с внешними системами

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

Задача — настроить автоматическое обновление количества товаров (stock quantity) в WooCommerce через REST API, чтобы остатки всегда соответствовали реальному состоянию на складе.

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

Для начала проверьте, как сейчас обновляются остатки:

  • Используется ли сторонний плагин интеграции?
  • Есть ли доступ к API вашего складского ПО?
  • Проверены ли права доступа REST API WordPress (OAuth или ключи)?
  • Как часто обновляются данные и какие ошибки есть в логах сервера?

Если обновление происходит вручную или нерегулярно, значит автоматизация отсутствует. Если есть ошибки 401, 403 или 404 при запросах, возможен неверный ключ или неправильный эндпоинт.

Пошаговое решение: создание скрипта для автоматического обновления остатков товаров через REST API WooCommerce

1. Подготовка API доступа

В админке WooCommerce перейдите WooCommerce > Настройки > Продвинутые > REST API и создайте нового пользователя с правами на чтение и запись. Сохраните Consumer Key и Consumer Secret.

2. Получение данных с внешнего склада

Предположим, внешний склад предоставляет JSON с товарами и их остатками по SKU:

[
  {"sku": "product-123", "stock_quantity": 10},
  {"sku": "product-456", "stock_quantity": 0},
  ...
]

3. Написание PHP-скрипта для обновления остатков

Создайте отдельный PHP-скрипт в корне сайта или в отдельном плагине, например update-stock.php:

<?php
require_once 'wp-load.php';

// Параметры WooCommerce REST API
$consumer_key = 'ck_xxxxx';
$consumer_secret = 'cs_xxxxx';
$store_url = 'https://example.com';

// Получаем данные склада
$stock_data = file_get_contents('https://external-warehouse/api/stock');
$stock_data = json_decode($stock_data, true);

if (!is_array($stock_data)) {
    error_log('Ошибка получения данных склада');
    exit;
}

foreach ($stock_data as $item) {
    $sku = $item['sku'];
    $stock_quantity = (int) $item['stock_quantity'];

    // Получаем ID товара по SKU
    $product_id = wc_get_product_id_by_sku($sku);
    if (!$product_id) {
        error_log("Товар с SKU $sku не найден");
        continue;
    }

    $product = wc_get_product($product_id);
    if (!$product) {
        error_log("Не удалось получить объект товара с ID $product_id");
        continue;
    }

    // Обновляем остаток
    $product->set_stock_quantity($stock_quantity);
    $product->set_stock_status($stock_quantity > 0 ? 'instock' : 'outofstock');
    $product->save();
}

echo 'Обновление остатков завершено';
?>

Этот скрипт загружает остатки, ищет товар по SKU, обновляет количество и статус наличия.

4. Автоматизация запуска скрипта через WP-Cron

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

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

add_action('update_woocommerce_stock_hook', 'update_woocommerce_stock_function');

function update_woocommerce_stock_function() {
    include_once ABSPATH . 'update-stock.php';
}

Это запустит обновление раз в час. Можно настроить интервал по необходимости.

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

  • В админке WooCommerce проверьте остатки товаров — они должны соответствовать данным склада.
  • В логах сервера (error_log) не должно быть ошибок по обновлению.
  • Выполните запрос к API склада вручную и сравните с остатками через WP-админку.

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

  • Товар не найден по SKU — убедитесь, что SKU в WooCommerce совпадают с SKU из внешнего источника, без лишних пробелов.
  • Ошибка 401/403 при использовании REST API — проверьте права пользователя и корректность ключей Consumer Key и Secret.
  • Скрипт не запускается по расписанию — проверьте, работает ли WP-Cron. Если сайт не посещается регулярно, настройте системный cron.
  • Обновление не сохраняется — убедитесь, что WooCommerce активен и функции wc_get_product_id_by_sku и wc_get_product доступны.

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

  • Не храните ключи REST API в открытом виде, используйте защищённые переменные окружения или wp-config.php.
  • Используйте nonce и проверку прав пользователя, если вызываете скрипт через веб.
  • Для больших каталогов запускайте обновление партиями, чтобы избежать таймаутов.
  • Записывайте успешные обновления и ошибки в отдельный лог-файл для анализа.

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

МетодПлюсыМинусы
Сторонний плагинБыстрая настройка, поддержка разработчика, UIЗависимость от плагина, возможные конфликты, оплата
Кастомный PHP-скрипт (REST API WooCommerce)Полный контроль, гибкость, отсутствие лишних функцийНужны знания программирования, ручная настройка
Вебхуки и интеграция со складомРеальное время обновления, автоматизацияСложность настройки, необходимость поддержки
Как решить проблему нерабочих скриптов в WooCommerce после обновления темы
11.05.2026
Как отключить WordPress Heartbeat API в админке и сократить нагрузку
24.08.2026
Как удалить пустые категории и таксономии в WordPress с помощью кода
08.04.2026
Как создать динамическую таблицу в WordPress с помощью AJAX
25.12.2025
Как добавить поддержку WebP в WordPress без плагинов
25.02.2026