WooCommerce: как программно удалить все вариации товара

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

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

Как получить все вариации товара в WooCommerce

Для начала нужно получить ID всех вариаций, привязанных к родительскому товару. Это можно сделать через WP_Query по типу product_variation и мета-полю _parent_id или с помощью функции WooCommerce wc_get_product().

function get_product_variation_ids( $product_id ) {
    $variation_ids = [];
    $product = wc_get_product( $product_id );
    if ( ! $product || $product->get_type() !== 'variable' ) {
        return $variation_ids;
    }
    $variations = $product->get_children(); // Массив ID вариаций
    return $variations;
}

Пошаговое решение: удаление всех вариаций товара

Удаление вариаций происходит через функцию удаления постов WordPress wp_delete_post(). Важно использовать параметр true, чтобы удалить без возможности восстановления.

function delete_all_product_variations( $product_id ) {
    $variation_ids = get_product_variation_ids( $product_id );
    if ( empty( $variation_ids ) ) {
        return 'Нет вариаций для удаления';
    }
    foreach ( $variation_ids as $variation_id ) {
        wp_delete_post( $variation_id, true );
    }
    return count( $variation_ids ) . ' вариаций удалено';
}

Используйте функцию так:

echo delete_all_product_variations( 123 ); // 123 - ID родительского товара

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

  • Перейдите в админку WooCommerce, откройте редактирование товара с ID 123.
  • Вкладка «Вариации» должна быть пустой.
  • Через базу данных (таблица wp_posts) убедитесь, что записи с типом product_variation и post_parent = 123 отсутствуют.

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

  • Вариации не удаляются: возможно, используется кэширование, очистите кэш сайта и браузера. Также проверьте права пользователя, под которым запускается скрипт, он должен иметь возможность удалять записи.
  • Удаляются не все вариации: убедитесь, что ID товара верны, и что товар действительно является переменным (variable).
  • Ошибка при удалении: проверьте, что функция вызывается в подходящий момент, например, через хук init или отдельный административный скрипт, а не слишком рано.

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

  • Запускайте удаление через административный интерфейс или WP-CLI, чтобы избежать таймаутов PHP при большом числе вариаций.
  • Обязательно делайте резервную копию базы перед массовым удалением.
  • Для массовых операций используйте пакетную обработку (batch processing), чтобы не перегружать сервер.
  • Если вариаций очень много, рассмотрите использование WP-CLI команды wp post delete с параметром --post_type=product_variation и фильтром по post_parent.

Сравнение методов удаления вариаций

Метод Плюсы Минусы
Программное удаление через PHP (wp_delete_post) Гибкость, можно встраивать в плагины и темы Риск таймаута при большом объеме, требует правильного запуска
Удаление через WP-CLI Быстро и эффективно, подходит для больших объемов Требуется доступ к командной строке сервера
Ручное удаление через админку Просто, не требует навыков программирования Непрактично при большом количестве вариаций
Как автоматизировать удаление нерабочих хуков в WordPress
12.04.2026
Как использовать WPRemark для автоматического модератора комментариев в WordPress
14.02.2026
Как добавить настройки в блоки Gutenberg в WordPress
06.01.2026
Как использовать хуки для автоматизации задач в WordPress
17.01.2026
WooCommerce: автоматическое изменение стоимости товара при применении купона
18.07.2026