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

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

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

Проверить наличие вариаций можно через SQL-запрос:

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

где 1234 — ID основного товара.

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

Удалим все вариации товара с ID $product_id через WP_Query и функцию wp_delete_post(). Вот рабочий пример:

function wc_delete_all_variations( $product_id ) {
    if ( ! $product_id ) {
        return false;
    }

    $args = array(
        'post_type'      => 'product_variation',
        'post_status'    => array('publish', 'private', 'trash'),
        'numberposts'    => -1,
        'post_parent'    => $product_id,
        'fields'         => 'ids',
    );

    $variations = get_posts( $args );

    if ( empty( $variations ) ) {
        return true; // Вариаций нет
    }

    foreach ( $variations as $variation_id ) {
        wp_delete_post( $variation_id, true ); // true — безвозвратное удаление
    }

    return true;
}

// Использование:
$product_id = 1234; // замените на ID вашего товара
wc_delete_all_variations( $product_id );

Функция получает ID товара, ищет все вариации и удаляет их без возможности восстановления.

Как проверить, что вариации удалены

  • В админке WooCommerce в разделе редактирования товара вариации должны исчезнуть.
  • Через SQL-запрос из раздела диагностики убедитесь, что вариаций с post_parent = $product_id больше нет.
  • Функция возвращает true при успешном удалении или отсутствии вариаций.

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

  • Вариации не удаляются, но функция возвращает true: возможно, у пользователя нет прав на удаление постов. Запустите код под администратором.
  • Вариации остаются в базе, но не отображаются в админке: проверьте кэширование. Очистите кэш сайта и браузера.
  • Удаление занимает слишком много времени: для товаров с тысячами вариаций стоит разбить удаление на партии (пагинация). Например, использовать 'numberposts' => 100 и запускать функцию по частям.

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

  • Всегда создавайте резервную копию базы перед массовыми операциями.
  • Не запускайте удаление на live-сайте без тестирования на копии.
  • Для больших каталогов разбивайте удаление на несколько шагов, чтобы избежать перегрузки сервера и ошибок по таймауту.
  • Используйте WP-CLI для массовых операций, если имеете доступ к командной строке — это быстрее и безопаснее.

Пример разбивки удаления на партии с WP_Query

function wc_delete_variations_batch( $product_id, $batch_size = 50 ) {
    $args = array(
        'post_type'      => 'product_variation',
        'post_status'    => array('publish', 'private', 'trash'),
        'posts_per_page' => $batch_size,
        'post_parent'    => $product_id,
        'fields'         => 'ids',
        'paged'          => 1,
    );

    do {
        $query = new WP_Query( $args );
        if ( ! $query->have_posts() ) {
            break;
        }

        foreach ( $query->posts as $variation_id ) {
            wp_delete_post( $variation_id, true );
        }

        $args['paged']++;
    } while ( $query->have_posts() );
}

wc_delete_variations_batch( 1234 );

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

МетодПреимуществаНедостатки
Ручное удаление в админкеПросто, без кодаМедленно, неудобно для большого числа вариаций
Код на PHP (get_posts + wp_delete_post)Автоматизация, можно запускать из темы или плагинаМожет вызвать таймаут при большом количестве
Пакетное удаление с пагинациейУменьшает нагрузку, подходит для больших каталоговСложнее реализовать, требует тестирования
WP-CLIБыстро, безопасно, без нагрузки на фронтендТребует SSH-доступа и знаний командной строки
Удаление всех вариаций товара в WooCommerce через код
16.05.2026
Как автоматизировать создание резервных копий WordPress с помощью PHP и плагинов
16.04.2026
WooCommerce: автоматическое изменение стоимости товара после применения купона
23.06.2026
Как запретить индексацию страниц авторов в WordPress
24.08.2026
Как удалить ненужные meta данные WordPress с помощью кода
31.01.2026