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

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

В WooCommerce иногда возникает ситуация, когда при смене статуса товара (например, с «черновика» на «опубликовано» или наоборот) товары неожиданно удаляются или становятся недоступны. Это не стандартное поведение WooCommerce, а чаще всего результат конфликтов с плагинами, кастомными функциями или ошибками в теме.

Для диагностики нужно проверить:

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

Использование отладочного режима WooCommerce

Включите режим отладки WooCommerce в wp-config.php:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Это позволит записывать ошибки в файл wp-content/debug.log без вывода на экран.

Пошаговое решение проблемы с удалением товаров

1. Проверка кастомных хуков и фильтров

В functions.php или в плагинах найдите обработчики, связанные с изменением статуса товара, например:

add_action('woocommerce_product_set_stock_status', 'your_custom_function');
add_action('save_post_product', 'your_save_post_callback');

Если в этих функциях есть код удаления или изменения статуса товара с удалением, временно уберите или закомментируйте его.

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

Отключите по очереди плагины, связанные с управлением товарами, кэшированием, очисткой базы данных (например, Clearfy Pro), чтобы найти виновника.

3. Корректное обновление статуса товара без удаления

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

$product = wc_get_product( $product_id );
$product->set_status( 'publish' );
$product->save();

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

4. Защита от случайного удаления

Добавьте фильтр, который отменяет удаление товара при смене статуса:

add_filter('wp_trash_post', function($post_id) {
    $post = get_post($post_id);
    if ($post->post_type === 'product') {
        // Отмена удаления товара
        return false;
    }
    return $post_id;
});

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

  • Измените статус товара в админке, проверьте, что он не удаляется.
  • Проверьте список товаров в каталоге и в базе данных — все товары на месте.
  • Убедитесь, что нет ошибок в debug.log.
  • Проверьте работу фронтенда — товар отображается корректно.

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

  • Ошибка: Использование wp_delete_post() или wp_trash_post() в хуках изменения статуса без проверки типа поста.
    Решение: Добавлять условие по типу поста.
  • Ошибка: Конфликт плагинов очистки базы или оптимизации.
    Решение: Исключить товары из автоматической очистки или отключить плагин.
  • Ошибка: Кастомный код, который неправильно обрабатывает смену статуса, например, удаляет метаданные и вызывает удаление товара.
    Решение: Ревизия функций и тестирование по шагам.

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

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

Сравнение вариантов решения

МетодПлюсыМинусыРекомендации
Отключение подозрительных плагиновБыстро выявляет источник проблемыМожет повлиять на функциональность сайтаПроверять на тестовом сайте
Исправление кастомного кодаКонтролируемое решение, сохраняет кастомные функцииТребует навыков PHP и тестированияИспользовать для долгосрочного решения
Фильтры отмены удаления товаровПростое временное решениеНе решает корень проблемыИспользовать как временную защиту
Как добавить автоматическое обновление плагинов в WordPress без push-уведомлений
16.12.2025
Как добавить дополнительное логирование в WordPress для отладки
15.03.2026
Как добавить поддержку видео в пользовательский блок Gutenberg в WordPress
13.12.2025
Настройка AJAX-отправки для добавления товаров в корзину WooCommerce без ошибок
22.04.2026
WooCommerce: решение проблем с расчетом доставки по зонам
12.05.2026