Как отключить автоматическое удаление вариаций товаров в WooCommerce

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

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

Чтобы понять, почему вариации удаляются, проверьте следующие моменты:

  • Активны ли плагины, связанные с автоматической очисткой товаров и вариаций (например, Clearfy, WP-Optimize, или кастомные скрипты)?
  • Есть ли в коде темы или плагинов хуки на woocommerce_delete_product или before_delete_post, которые удаляют вариации?
  • Как настроена политика хранения данных WooCommerce и есть ли запланированные задания WP-Cron, которые запускают очистку?

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

1. Отключение плагинов очистки

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

2. Проверка кастомных скриптов и хуков

Ищите в файлах темы и плагинов следующий пример кода, который может удалять вариации:

add_action('before_delete_post', 'custom_delete_variations');
function custom_delete_variations($post_id) {
    $post = get_post($post_id);
    if($post->post_type === 'product') {
        $variations = wc_get_products(array(
            'type' => 'variation',
            'parent' => $post_id,
            'limit' => -1
        ));
        foreach($variations as $variation) {
            wp_delete_post($variation->get_id(), true);
        }
    }
}

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

3. Исключение вариаций из автоматической очистки WP-Cron

Если используется WP-Cron для регулярной очистки, добавьте проверку типа записей, чтобы вариации не удалялись:

add_action('my_custom_cleanup_hook', 'prevent_variation_deletion');
function prevent_variation_deletion() {
    $args = array(
        'post_type' => array('product', 'product_variation'),
        'post_status' => 'any',
        'fields' => 'ids',
    );
    $products = get_posts($args);
    foreach ($products as $product_id) {
        $product = wc_get_product($product_id);
        if ($product->is_type('variation')) {
            // пропускаем вариации
            continue;
        }
        // Логика удаления для обычных товаров
    }
}

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

  • Создайте тестовый товар с несколькими вариациями.
  • Подождите несколько дней (или запустите WP-Cron вручную через WP-CLI: wp cron event run --due-now), чтобы проверить, не удаляются ли вариации.
  • Если вариации остаются — проблема решена.

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

  • Ошибка: Не отключили все плагины очистки.
    Исправление: Поочерёдно отключайте плагины и тестируйте.
  • Ошибка: Кастомный код удаляет вариации без проверки типа.
    Исправление: Добавьте проверку $post->post_type === 'product' и исключайте вариации.
  • Ошибка: WP-Cron запускается с ошибками или не запускается.
    Исправление: Проверьте работу WP-Cron через WP-CLI и системные логи.

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

  • Всегда делайте резервное копирование базы данных перед внесением изменений, особенно при работе с удалением записей.
  • Оптимизируйте запросы в WP-Cron, фильтруя только нужные типы записей, чтобы не нагружать базу.
  • Используйте плагин Clearfy Pro для управления автоматической очисткой и исключения вариаций из удаления без необходимости писать кастомный код.

Сравнение способов отключения удаления вариаций

МетодПлюсыМинусы
Отключение плагина очисткиБыстро, не требует кодаМожет повлиять на другие очистки
Изменение кастомного кодаТонкая настройка, полный контрольТребует навыков программирования
Использование плагина Clearfy ProУправление через интерфейс, безопасноПлатный функционал