Проблема: зачем удалять вариации без удаления основного товара
В WooCommerce товары с вариациями — отдельный тип товаров с подтоварами (вариациями). Иногда нужно убрать отдельные вариации, например, устаревшие или снятые с продажи, но оставить основной товар для возможности добавления новых вариаций или отображения общей информации. При этом нельзя удалять сам родительский товар, иначе пропадут все вариации и товар исчезнет из каталога.
Диагностика задачи: как проверить связи вариаций с основным товаром
Для начала убедитесь, что вариации действительно связаны с родительским товаром. Это можно сделать через админку WooCommerce:
- Перейдите в Товары → выберите нужный товар с вариациями;
- Вкладка Вариации покажет список всех подтоваров;
- Проверьте, что в базе вариации имеют тип
product_variationи связаны полемpost_parentс основным товаром.
Для проверки через базу данных можно выполнить SQL-запрос (например, через phpMyAdmin):
SELECT ID, post_title FROM wp_posts WHERE post_parent = {ID_основного_товара} AND post_type = 'product_variation';Если вариации есть, можно приступать к выборочному удалению.
Пошаговое решение: удаление вариаций через код
WooCommerce не предоставляет UI для массового удаления вариаций, только одиночное удаление. Для массовых операций удобнее использовать код в файле темы или плагине:
function wpcontrol_delete_product_variations( $product_id, $variation_ids = [] ) {
if ( ! $variation_ids ) {
return false;
}
foreach ( $variation_ids as $variation_id ) {
$variation = wc_get_product( $variation_id );
if ( $variation && $variation->get_parent_id() === $product_id ) {
wp_delete_post( $variation_id, true );
}
}
return true;
}
// Пример вызова: удаляем вариации с ID 101 и 102 у товара 50
wpcontrol_delete_product_variations( 50, [101, 102] );Этот код проверяет, что вариация принадлежит нужному товару, и удаляет её без возможности восстановления (true во втором параметре wp_delete_post). Таким образом, основной товар останется в базе и на сайте.
Как получить ID вариаций для удаления
Можно получить ID вариаций через админку, наведя курсор на вариацию и посмотрев URL редактирования, или вывести их программно:
$product = wc_get_product( 50 );
$variations = $product->get_children();
print_r( $variations );Это вернёт массив ID всех вариаций товара с ID 50.
Проверка результата после удаления вариаций
- В админке в карточке товара во вкладке «Вариации» удалённые вариации исчезнут;
- В каталоге товаров и на витрине вариации не будут отображаться;
- В базе данных SQL-запросом можно убедиться, что записи с удалёнными ID отсутствуют;
- Основной товар останется доступен для просмотра и редактирования.
Частые ошибки при удалении вариаций и как их исправить
- Удаление вариаций без проверки родителя: можно случайно удалить вариации чужих товаров. Всегда проверяйте
get_parent_id(). - Удаление основного товара вместо вариаций: убедитесь, что ID вариаций — это именно дочерние записи с типом
product_variation, а не сам товар. - Отсутствие прав на удаление: код должен запускаться с пользователем, у которого есть права
delete_postsдля вариаций. - Кэширование: после удаления может потребоваться очистить кэш сайта и браузера, чтобы изменения отобразились.
Практические советы по безопасности и производительности
- Всегда делайте резервную копию базы данных перед массовым удалением данных.
- Используйте
wp_delete_postс параметромtrueтолько если уверены в необходимости полного удаления без возможности восстановления. - Для крупных магазинов удаление большого количества вариаций лучше выполнять пакетами, чтобы избежать таймаутов и перегрузки сервера.
- Рассмотрите использование плагина Clearfy Pro для оптимизации базы данных и безопасного удаления неиспользуемых записей, если требуется регулярная чистка.
Сравнение способов удаления вариаций
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Удаление вручную через админку | Удаление каждой вариации по отдельности | Простой, не требует кода | Долго при большом количестве вариаций |
| Массовое удаление через код | Скрипт удаляет вариации по ID | Быстро, можно автоматизировать | Требует навыков программирования |
| Плагины для массового удаления | Интерфейс для удаления вариаций | Удобно, не нужно писать код | Риск конфликтов, нагрузка на сайт |