WooCommerce: невозможно изменить складские запасы через админку — как исправить

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

Если в админке WooCommerce вы пытаетесь изменить количество товара на складе, но после сохранения изменений количество не меняется, это указывает на проблему с управлением запасами. Такое поведение может быть вызвано конфликтами плагинов, ошибками в теме, некорректной работой хуков или проблемами с типом товара.

Проверка настроек товара

Первым делом убедитесь, что на уровне товара включено управление запасами:

  • Откройте карточку товара в админке WooCommerce.
  • Перейдите на вкладку Запасы.
  • Убедитесь, что опция Управлять запасами? активна.

Если опция не включена, изменения складских запасов просто не применяются.

Проверка типа товара

Администрирование запасов работает иначе для разных типов товаров (простой, вариативный, групповой). Для вариативных товаров складские запасы задаются на уровне вариаций, а не самого товара.

Пошаговое решение проблемы с изменением складских запасов

Шаг 1. Проверка конфликтов плагинов и темы

  • Отключите все сторонние плагины, кроме WooCommerce.
  • Переключитесь на стандартную тему WordPress, например Twenty Twenty-Three.
  • Попробуйте изменить складские запасы повторно.

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

Шаг 2. Проверка и исправление кода в functions.php или плагинах

Иногда кастомный код может блокировать обновление мета-полей запасов. Проверьте наличие фильтров или действий, которые могут отменять сохранение:

add_filter('woocommerce_product_set_stock', function($product, $stock_quantity) {
    // Проверить, нет ли тут условий, препятствующих обновлению
    return $product;
}, 10, 2);

Если такой код есть, временно отключите его.

Шаг 3. Принудительное обновление складских запасов через код

Если стандартное изменение не работает, можно обновить запасы программно:

$product_id = 123; // ID товара
$product = wc_get_product($product_id);
if ($product && $product->managing_stock()) {
    $product->set_stock_quantity(10); // Новое количество
    $product->save();
}

Этот код можно выполнить в консоли WP-CLI или через временный сниппет.

Шаг 4. Очистка кэша и перезапуск сервера

Иногда серверный или плагин кэш мешает обновлению данных. Очистите все кеши (объектный, OPCache, плагинов кеширования) и перезапустите PHP-FPM/Apache/Nginx.

Как проверить, что решение сработало

  • В админке измените количество товара и сохраните.
  • Перейдите на страницу товара на сайте и убедитесь, что отображается актуальное количество.
  • Через код получите актуальное значение и сравните:
$product = wc_get_product(123);
echo $product->get_stock_quantity();

Результат должен совпадать с изменённым значением.

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

  • Ошибка: Изменение запасов на вариациях не применяется.
    Причина: Изменение происходит на уровне родительского товара вместо вариаций.
    Решение: Изменяйте запасы для каждой вариации отдельно через вкладку вариаций.
  • Ошибка: Кастомные хуки блокируют обновление.
    Причина: Пользовательский код перехватывает сохранение.
    Решение: Проверьте и отключите сторонние фильтры/действия, влияющие на save_post или woocommerce_product_set_stock.
  • Ошибка: Использование плагинов для управления запасами с багами.
    Причина: Конфликт логики управления запасами.
    Решение: Временно отключите такие плагины и проверьте поведение.

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

  • Не храните запасы в пользовательских таблицах или опциях — используйте стандартные мета-поля WooCommerce, чтобы избежать конфликтов.
  • Для массового обновления запасов используйте WP-CLI или пакетные операции, чтобы не перегружать базу и избежать таймаутов.
  • Ограничьте права доступа к изменению запасов через роли и capabilities, чтобы избежать нежелательных изменений.

Таблица сравнения способов решения проблемы с изменением запасов

СпособПлюсыМинусыКогда использовать
Стандартное изменение в админкеПростота и наглядностьМожет не работать при конфликтахДля разовых изменений
Программное обновление через wc_get_product()Гибкость, подходит для массовых измененийТребует навыков разработкиАвтоматизация и исправление ошибок
Отключение конфликтных плагиновВыявление причины проблемыВременное решениеДиагностика и устранение конфликтов
Как отключить Gutenberg и вернуть классический редактор в WordPress
04.01.2026
Как отладить проблемы с отправкой писем в WordPress
03.03.2026
Как создать собственный виджет в WordPress: практическое руководство
10.11.2025
Как сделать автоматическое удаление старых черновиков в WordPress
12.03.2026
Автоматические подписки на платежи в WooCommerce с помощью WPRemark
08.02.2026