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

Диагностика проблемы: почему товары удаляются при обновлении WooCommerce

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

Проверьте логи сервера и WooCommerce (в разделе Отчёты > Логи) на наличие ошибок, связанных с удалением записей post_type = 'product'. Также отключите все недавно установленные плагины для импорта/синхронизации товаров и проверьте, сохраняется ли проблема.

Причины автоматического удаления товаров при обновлении WooCommerce

  • Конфликт импорта/синхронизации — плагины для массового импорта товаров могут очищать базу от старых записей при обновлении.
  • Кастомный код в functions.php или плагинах, который реализует очистку записей по хукам обновления.
  • Ошибки в миграции базы данных во время обновления WooCommerce.
  • Вмешательство сторонних плагинов безопасности или оптимизации, которые неправильно обрабатывают кастомные типы записей.

Пошаговое решение: отключаем автоматическое удаление

1. Отключите подозрительные плагины

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

2. Проверьте и удалите кастомный код очистки товаров

В файле functions.php темы и в пользовательских плагинах найдите код с функциями wp_delete_post(), wp_trash_post(), или массовой очистки post_type 'product'. Пример потенциально опасного кода:

add_action('upgrader_process_complete', 'clear_products_on_update', 10, 2);
function clear_products_on_update($upgrader, $options) {
    if ($options['action'] == 'update' && $options['type'] == 'plugin') {
        global $wpdb;
        $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'product'");
    }
}

Удалите или закомментируйте такой код.

3. Используйте фильтр woocommerce_prevent_product_deletion

WooCommerce не имеет встроенного фильтра для предотвращения удаления товаров при обновлении, но можно добавить кастомную проверку на удаление товара:

add_filter('before_delete_post', function($postid) {
    $post = get_post($postid);
    if ($post && $post->post_type === 'product') {
        // Предотвращаем удаление
        return new WP_Error('forbidden', 'Запрещено удалять товары автоматическим процессом');
    }
    return true;
});

Этот код запрещает удалять товары через стандартное удаление постов.

4. Обновите WooCommerce вручную

Временно переключитесь на стандартную тему (например, Twenty Twenty-Three) и отключите все плагины, кроме WooCommerce. Обновите WooCommerce вручную, чтобы исключить конфликты.

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

  • Обновите WooCommerce в тестовом окружении с отключёнными плагинами и без кастомного кода очистки.
  • Проверьте наличие товаров в панели администратора (Товары > Все товары) до и после обновления.
  • Посмотрите логи ошибок в WooCommerce и на сервере — отсутствие записей об удалении товаров.
  • Попробуйте программно удалить товар через интерфейс, чтобы убедиться, что фильтр работает.

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

  • Ошибка: Код очистки товаров в functions.php не удалён —
    Решение: Найдите и отключите все вызовы DELETE по post_type 'product'.
  • Ошибка: Плагины импорта/синхронизации удаляют товары при обновлении —
    Решение: Используйте режим безопасного обновления, отключая плагины до завершения обновления.
  • Ошибка: Фильтр before_delete_post возвращает не boolean или WP_Error —
    Решение: Убедитесь, что фильтр возвращает либо true, либо WP_Error для остановки удаления.

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

  • Не используйте массовое удаление товаров по прямым SQL-запросам — вместо этого применяйте штатные функции WordPress и WooCommerce.
  • Для обновлений используйте staging-окружение, чтобы предотвратить потерю данных на боевом сайте.
  • Регулярно создавайте резервные копии базы данных перед обновлениями.
  • Оптимизируйте работу импортеров: настройте их на добавление/обновление товаров без удаления старых.
  • Если хотите контролировать удаление товаров, используйте плагин Clearfy Pro от WPShop для безопасного управления контентом и оптимизации.

Сравнение вариантов решения проблемы удаления товаров при обновлении WooCommerce

МетодОписаниеПлюсыМинусы
Отключение плагинов импорта/синхронизации Деактивация перед обновлением WooCommerce Простой и быстрый способ Зависит от отключения вручную, неудобно при частых обновлениях
Удаление кастомного кода очистки товаров Проверка и исправление functions.php и плагинов Контроль над процессом, стабильность Требует навыков разработки и анализа кода
Добавление фильтра before_delete_post Блокировка удаления товаров программно Защищает от случайного удаления Не предотвращает удаление через прямые SQL-запросы
Использование специальных плагинов (Clearfy Pro) Управление безопасностью и оптимизацией сайта Удобный интерфейс, дополнительные функции Платное решение
Создаем и оптимизируем кэш в WordPress своими руками: практическое руководство
04.12.2025
Как удалить неиспользуемые таблицы базы данных WordPress без риска
15.03.2026
Как добавить автозагрузку изображений в WooCommerce для ускорения сайта
30.03.2026
WooCommerce для российских продавцов: настройка платежей и фискализации
07.06.2026
Как автоматизировать обновление плагинов WordPress без рисков
15.01.2026

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