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

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

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

Чтобы проверить, есть ли неиспользуемые вариации, можно выполнить запрос к базе данных или использовать WP-CLI. Например, запрос SQL для подсчёта вариаций, не связанных с активными продуктами:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product_variation' AND post_parent NOT IN (SELECT ID FROM wp_posts WHERE post_type = 'product' AND post_status = 'publish');

Если результат велик — пора очистить базу.

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

1. Создаём функцию для удаления «осиротевших» вариаций

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

function premiumwp_delete_unused_variations() {
    global $wpdb;
    // Получаем ID вариаций без существующего опубликованного родителя
    $query = "
        SELECT v.ID FROM {$wpdb->posts} v
        LEFT JOIN {$wpdb->posts} p ON v.post_parent = p.ID
        WHERE v.post_type = 'product_variation'
        AND (p.ID IS NULL OR p.post_status != 'publish')
    ";
    $variations = $wpdb->get_col($query);

    if (empty($variations)) {
        return 'Неиспользуемые вариации не найдены.';
    }

    foreach ($variations as $variation_id) {
        wp_delete_post($variation_id, true); // Полное удаление
    }

    return 'Удалено вариаций: ' . count($variations);
}

2. Запускаем удаление через WP-CLI или временно добавляем вызов функции

Лучше всего вызвать эту функцию через WP-CLI:

wp eval 'echo premiumwp_delete_unused_variations();'

Или временно добавьте вызов функции в functions.php темы и обновите сайт один раз:

add_action('init', function() {
    if (current_user_can('administrator') && isset($_GET['delete_unused_variations'])) {
        echo premiumwp_delete_unused_variations();
        exit;
    }
});

После запуска удалите этот код.

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

После удаления повторите SQL-запрос из раздела диагностики. Количество неиспользуемых вариаций должно быть нулевым. В админке WooCommerce проверьте список вариаций — лишних не должно остаться.

Также можно запустить WP-CLI команду для подсчёта вариаций:

wp post list --post_type=product_variation --format=ids | wc -w

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

  • Удаление нужных вариаций: Если родитель не опубликован, но планируется публикация — вариация удалится. Решение: запускать удаление на сайтах с актуальным статусом продуктов.
  • Ошибка прав доступа: Функция wp_delete_post требует прав администратора. Запускайте только под админом.
  • Больше вариаций, чем ожидалось: В WooCommerce возможны вариации с родителями в черновиках или на паузе — они тоже удалятся. Проверьте статус, если это критично, и модифицируйте запрос.

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

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

Альтернативные способы удаления вариаций: сравнение

МетодПлюсыМинусы
Ручное удаление через админку WooCommerceПростота, визуальный контрольДолго, неудобно при большом количестве
Плагины очистки базы (например, WP Sweep)Автоматизация, дополнительные функцииМогут удалять лишнее, нагрузка на сайт
Кодовое решение (описано в статье)Точный контроль, можно адаптироватьТребует знаний, риск удаления нужных данных
Как настроить обработку загрузки и проверки файлов в WordPress
24.11.2025
WooCommerce: как настроить авторизацию через социальные сети без плагинов
20.04.2026
Двойная авторизация в WordPress: настройка двухфакторной аутентификации с плагином PHTMLMFA
11.02.2026
Оптимизация загрузки и отображения библиотек JS и CSS в WordPress
25.12.2025
WooCommerce: как отключить оформление заказа для определённых продуктов
05.05.2026