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

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

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

  • В админке WooCommerce перейдите в раздел Продукты → Вариации (через редактирование переменного товара) и проверьте количество вариаций для каждого товара.
  • Подключитесь к базе данных через phpMyAdmin и выполните запрос:
SELECT COUNT(*) AS total_variations, post_parent FROM wp_posts WHERE post_type = 'product_variation' GROUP BY post_parent ORDER BY total_variations DESC;

Этот запрос покажет количество вариаций у каждого родительского товара. Если у товаров число вариаций слишком большое или есть вариации без активности (статус не опубликован), стоит их почистить.

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

1. Определяем критерии удаления

Чаще всего под «неиспользуемыми» понимают вариации, которые:

  • имеют статус draft или trash;
  • не имеют заказов или просмотров (если отслеживается);
  • созданы, но никогда не опубликованы или не используются в каталоге.

2. Подготовка резервной копии

Перед удалением любых данных в базе обязательно сделайте резервную копию. Можно использовать плагины или настроить автоматическое резервное копирование, например, с помощью Clearfy.

3. Код для массового удаления вариаций

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

function premiumwp_remove_unused_product_variations() {
    global $wpdb;

    // Получаем ID вариаций со статусом draft или trash
    $variations = $wpdb->get_col(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product_variation' AND post_status IN ('draft', 'trash')"
    );

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

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

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

// Можно вызвать функцию вручную, например, через WP-CLI или временно через admin_init
add_action('admin_init', function() {
    if (isset($_GET['remove_unused_variations']) && current_user_can('manage_woocommerce')) {
        $result = premiumwp_remove_unused_product_variations();
        echo '<div class="notice notice-success is-dismissible"><p>' . esc_html($result) . '</p></div>';
    }
});

Чтобы запустить удаление, зайдите в админ-панель и добавьте к URL ?remove_unused_variations=1. Например: https://example.com/wp-admin/?remove_unused_variations=1.

4. Оптимизация базы после удаления

Удаление записей не всегда освобождает место в базе данных. Запустите оптимизацию таблиц MySQL:

OPTIMIZE TABLE wp_posts;

Для этого можно использовать phpMyAdmin или подключиться к базе через терминал.

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

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

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

  • Удаление не тех вариаций: если критерии статуса слишком общие, вы можете удалить нужные вариации. Решение — использовать более точные условия или предварительно выводить список на экран для проверки.
  • Ошибки доступа при запуске скрипта: убедитесь, что вызов происходит под пользователем с правами manage_woocommerce или админом.
  • База не оптимизируется: если после удаления место не освободилось, запустите OPTIMIZE TABLE вручную, либо используйте плагин для оптимизации базы.

Практические советы по оптимизации и безопасности

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

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

МетодПлюсыМинусыКомпромисс
Удаление вручную в админкеПростота, визуальный контрольМного времени, неэффективно для больших каталоговПодходит для единичных случаев
Код в functions.php (как в статье)Автоматизация, быстрое удалениеТребует навыков, риск ошибки без проверкиИспользовать с тестированием и резервными копиями
Плагины очистки базы (например, Clearfy)Доп. функционал, удобный интерфейсМогут быть платными, не всегда гибкиеРекомендуется для регулярного обслуживания
Как удалить пустые мета-поля в WordPress для оптимизации базы данных
17.12.2025
Как отключить AJAX в контактной форме WordPress
29.03.2026
Как создать автоматический импорт постов в WordPress с помощью PremiumWP
02.01.2026
WooCommerce: как удалить неиспользуемые вариации продуктов через код
14.05.2026
Как решить проблему конфликта JavaScript в WordPress
13.01.2026