Как удалить варианты товаров WooCommerce по условию через код

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

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

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

Перед удалением нужно четко определить критерии — по атрибутам, цене, наличию на складе, статусу и т.п. Пример условий:

  • Варианты с ценой ниже минимальной границы.
  • Варианты с определенным атрибутом (например, цвет «красный»).
  • Варианты без остатка на складе.

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

$args = [
    'post_type'      => 'product_variation',
    'posts_per_page' => -1,
    'meta_query'     => [
        [
            'key'     => 'attribute_pa_color',
            'value'   => 'red',
            'compare' => '=',
        ],
    ],
];
$variations = get_posts($args);

Здесь attribute_pa_color — так хранится атрибут "цвет".

Пошаговое решение: удаление вариантов через код

1. Создайте дочернюю тему или используйте плагин для пользовательских функций.

2. Добавьте код для выборки вариантов по условию и удаления через функцию wp_delete_post(). Пример:

function delete_variations_by_condition() {
    $args = [
        'post_type'      => 'product_variation',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => 'attribute_pa_color',
                'value'   => 'red',
                'compare' => '=',
            ],
        ],
    ];

    $variations = get_posts($args);

    if (empty($variations)) {
        error_log('No variations found for deletion.');
        return;
    }

    foreach ($variations as $variation) {
        wp_delete_post($variation->ID, true); // true — принудительное удаление без корзины
    }

    error_log(count($variations) . ' variations deleted successfully.');
}

// Запускаем функцию вручную или через WP-CLI
// delete_variations_by_condition();

3. Запустите функцию один раз, например, подключив её к временному хуку или через WP-CLI, чтобы избежать повторных удалений.

Проверка результата

  • Перейдите в админку WooCommerce — раздел "Вариации" товара и убедитесь, что нужные вариации отсутствуют.
  • Проверьте логи (если включено) на сообщения об удалении.
  • Используйте get_posts с тем же условием — должен вернуть пустой массив.

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

  • Неправильный ключ мета-данных атрибута. В WooCommerce атрибуты вариаций сохраняются с префиксом attribute_pa_ + slug атрибута. Проверьте точное имя через базу или отладку.
  • Удаление не всех вариантов. Проверьте параметры запроса get_posts, особенно 'posts_per_page' => -1. По умолчанию возвращается 5.
  • Удаление без прав администратора. Запускайте код под пользователем с правами на удаление постов.
  • Функция запускается несколько раз. Лучше запускать из WP-CLI или временно, иначе дублируется удаление.

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

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

Сравнение удаления вариантов: код vs плагины

МетодПлюсыМинусыКомпромисс
Ручное удалениеПросто, без кодаМедленно, риск ошибок при большом объемеПодходит для малых каталогов
Плагины массового редактированияУдобный интерфейс, фильтрыМогут нагружать сайт, не все бесплатныХорошо для частых операций
Код (wp_delete_post)Гибкость, автоматизация, интеграция с WP-CLIТребует навыков, риски при ошибкахЛучший вариант для разработчиков и больших сайтов
Как удалить варианты товаров WooCommerce по условию через код
23.05.2026
Автоматическое удаление старых transient через transient в WordPress
15.12.2025
Как создать авторизацию через собственную форму в WordPress
30.11.2025
Оптимизация изображений в WordPress: лучшие решения для ускорения сайта
15.01.2026
Как создать собственный плагин для автоматического удаления старых постов в WordPress
15.04.2026