WooCommerce: как удалить все вариации товара из базы через код

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

В WooCommerce вариации товаров создаются как отдельные записи в базе данных, что со временем может привести к избыточности и замедлению работы сайта, особенно если вариации устарели или не используются. Стандартные методы удаления через админку неудобны для массового удаления, а плагины иногда оказываются слишком громоздкими и не дают нужной гибкости.

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

Как найти вариации товара в базе WooCommerce

Вариации товаров в WooCommerce — это записи типа product_variation в таблице wp_posts. Каждая вариация связана с родительским товаром через поле post_parent.

Пример SQL-запроса для получения всех вариаций товара с ID родителя 123:

SELECT ID, post_title FROM wp_posts WHERE post_type = 'product_variation' AND post_parent = 123;

Пошаговое решение: как удалить все вариации товара через PHP-код

Для удаления вариаций безопаснее использовать встроенные функции WordPress и WooCommerce, чтобы корректно очистить все связанные данные (мета, атрибуты и т.п.).

Ниже пример функции, которую можно добавить в файл functions.php вашей темы или в кастомный плагин. Вызовите функцию с ID родительского товара:

function wc_delete_product_variations_by_parent_id( $parent_product_id ) {
    if ( ! $parent_product_id ) {
        return false;
    }

    $args = array(
        'post_type'   => 'product_variation',
        'post_parent' => $parent_product_id,
        'numberposts' => -1,
        'post_status' => 'any',
        'fields'      => 'ids',
    );

    $variation_ids = get_posts( $args );

    if ( empty( $variation_ids ) ) {
        return 0; // Нет вариаций
    }

    $deleted_count = 0;
    foreach ( $variation_ids as $variation_id ) {
        if ( wp_delete_post( $variation_id, true ) ) {
            $deleted_count++;
        }
    }

    return $deleted_count;
}

Вызов функции:

$count = wc_delete_product_variations_by_parent_id( 123 );
echo "Удалено вариаций: " . $count;

Что делает код

  • Получает все вариации по ID родительского товара
  • Удаляет каждую вариацию принудительно (без перемещения в корзину)
  • Возвращает количество удалённых вариаций

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

Чтобы убедиться, что вариации удалились, выполните SQL-запрос:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product_variation' AND post_parent = 123;

Если запрос вернул 0, значит вариации успешно удалены.

Также проверьте в админке WooCommerce: на странице редактирования товара вариации должны отсутствовать.

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

  • Неверный ID родительского товара: функция ничего не удалит, если передан пустой или несуществующий ID. Проверьте, что ID верен и товар существует.
  • Отсутствие прав: функция должна запускаться с правами администратора или через WP-CLI, иначе wp_delete_post может не сработать.
  • Кэширование: если вариации не исчезают из админки, очистите кэш сайта и браузера.
  • Связанные данные: иногда метаданные вариаций остаются в базе. Для полной очистки можно дополнительно удалить мета по ID вариаций через SQL.

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

  • Перед запуском массового удаления сделайте резервную копию базы данных.
  • Удаляйте вариации партиями, если их очень много, чтобы избежать тайм-аутов PHP.
  • Используйте WP-CLI для запуска кода из командной строки: wp eval-file delete-variations.php — это безопаснее и быстрее.
  • Для частого массового удаления можно сделать админ-страницу с кнопкой, вызывающей удаление через AJAX с подтверждением.

Таблица сравнения методов удаления вариаций WooCommerce

МетодПлюсыМинусыРекомендации
Удаление через админкуПростота, визуальный контрольМедленно при большом количестве вариацийДля единичных товаров
Плагины массового удаленияАвтоматизация, удобный интерфейсМожет быть избыточным, нагрузка на сайтДля регулярных операций на средних объемах
Удаление через код (как в статье)Гибкость, скорость, контрольТребует навыков, риск ошибки без бэкапаДля опытных разработчиков, массовое удаление
WooCommerce: решение проблемы с неотображением вариаций товаров
02.06.2026
Как автоматически удалять неиспользуемые вариации товаров в WooCommerce через код
12.06.2026
Как создать динамические метаполя для кастомных типов записей в WordPress
07.02.2026
Как создать автоматическое удаление старых записей в WordPress через WP-Cron
15.03.2026
WooCommerce: автоматическое удаление неиспользуемых вариаций товаров через код
26.05.2026