yelly.ru wordpress Yelly

Массовое удаление неиспользуемых вариаций товаров в 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 > Товары > Вариации и убедитесь, что неиспользуемых вариаций больше нет.

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

  • Запустите SQL-запрос из раздела диагностики повторно — он должен вернуть пустой результат.
  • Проверьте количество записей в таблице wp_posts с post_type = 'product_variation' через phpMyAdmin или WP-CLI:
wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product_variation';"

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

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

  • Удаление активных вариаций: убедитесь, что фильтр не затрагивает вариации с действующими товарами. Запрос учитывает статус родительских товаров — проверьте, что товары не в статусе «trash».
  • Отсутствие прав на удаление: функция wp_delete_post требует прав администратора. Запускайте код под пользователем с соответствующими правами.
  • Не обновляется кэш: очистите кэш сайта и браузера после удаления, чтобы увидеть актуальные данные.

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

  • Всегда делайте резервную копию базы перед массовым удалением данных.
  • Для больших баз данных используйте WP-CLI для пакетной обработки, чтобы избежать таймаутов:
wp post delete $(wp post list --post_type=product_variation --field=ID --post_parent=0) --force
  • Регулярно проверяйте базу на наличие устаревших данных с помощью SQL-запросов.
  • Используйте плагин Clearfy Pro для автоматической очистки базы и оптимизации WooCommerce — он умеет удалять неиспользуемые вариации и метаданные.

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

МетодПреимуществаНедостатки
Ручное удаление через админкуПросто, не требует кодаМного времени, неэффективно для большого количества
PHP-скрипт удаленияАвтоматизация, можно запускать периодическиТребует навыков, риски при ошибках в коде
WP-CLI командыБыстро и безопасно для больших сайтовТребует доступа к серверу и знаний WP-CLI
Плагины оптимизации (Clearfy Pro)Дополнительные функции, автоматизация очисткиПлатные решения, возможные конфликты с другими плагинами
×
Сделай WordPress мощнее!

Скидка -20% на топовые премиум плагины

Выбрать плагин сейчас ⋙