Массовое удаление неиспользуемых вариаций товаров в WooCommerce

|

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

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

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

SELECT p.ID, p.post_title FROM wp_posts p
LEFT JOIN wp_posts parent ON p.post_parent = parent.ID
WHERE p.post_type = 'product_variation'
AND (parent.post_status IS NULL OR parent.post_status = 'trash');

Если запрос возвращает записи — это вариации, у которых нет активных товаров-родителей. Их стоит удалить.

Пошаговое решение: как удалить неиспользуемые вариации с помощью кода

1. Резервное копирование базы данных

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

2. Создание PHP-скрипта для удаления вариаций без товаров

Добавьте следующий код в файл functions.php вашей темы или создайте отдельный плагин:

function delete_unused_product_variations() {
    global $wpdb;
    // Получаем ID вариаций, у которых нет активного родителя
    $variations = $wpdb->get_col(
        "SELECT p.ID FROM {$wpdb->posts} p
        LEFT JOIN {$wpdb->posts} parent ON p.post_parent = parent.ID
        WHERE p.post_type = 'product_variation'
        AND (parent.post_status IS NULL OR parent.post_status = 'trash')"
    );

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

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

    error_log('Удалено ' . count($variations) . ' неиспользуемых вариаций.');
}

// Запускаем при активации темы или вручную
// delete_unused_product_variations();

Для запуска вызовите delete_unused_product_variations() один раз вручную или подключите вызов при активации темы/плагина.

3. Проверка удаления через админку

Перейдите в WooCommerce > Товары > Вариации и убедитесь, что неиспользуемых вариаций больше нет.

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

wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product_variation';"

Если количество вариаций снизилось и сайт работает корректно — задача решена.

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

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

wp post delete $(wp post list --post_type=product_variation --field=ID --post_parent=0) --force

Сравнение способов удаления неиспользуемых вариаций в WooCommerce

МетодПреимуществаНедостатки
Ручное удаление через админкуПросто, не требует кодаМного времени, неэффективно для большого количества
PHP-скрипт удаленияАвтоматизация, можно запускать периодическиТребует навыков, риски при ошибках в коде
WP-CLI командыБыстро и безопасно для больших сайтовТребует доступа к серверу и знаний WP-CLI
Плагины оптимизации (Clearfy Pro)Дополнительные функции, автоматизация очисткиПлатные решения, возможные конфликты с другими плагинами
Как отключить автозапуск WP-Cron в WordPress и настроить системный cron
15.03.2026
Как создать автоматический каталог карт в WordPress с использованием Yelly
12.04.2026
Как создать динамическую картинку из текста в WordPress с примерами кода
25.02.2026
Как создать свой шорткод в WordPress: практические примеры и советы
01.11.2025
Как создать динамические формы в WordPress с помощью AJAX
15.12.2025
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙