Диагностика проблемы: почему 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 | Управление через интерфейс, безопасно | Платный функционал |