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

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

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

Чтобы проверить, есть ли у вас неактивные вариации, выполните SQL-запрос к базе данных (через phpMyAdmin или WP CLI):

SELECT p.ID, p.post_parent, p.post_status FROM wp_posts p WHERE p.post_type = 'product_variation' AND p.post_status != 'publish';

Если в результате много записей с статусом draft, trash или другими неактивными статусами, стоит рассмотреть их удаление.

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

1. Создание функции для очистки вариаций

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

function wc_delete_inactive_variations() {
    global $wpdb;
    // Получаем ID вариаций со статусом, отличным от 'publish'
    $inactive_variations = $wpdb->get_col(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product_variation' AND post_status != 'publish'"
    );

    if (empty($inactive_variations)) {
        return;
    }

    foreach ($inactive_variations as $variation_id) {
        // Удаляем вариацию полностью
        wp_delete_post($variation_id, true);
    }
}

2. Запуск функции вручную или через Cron

Чтобы не запускать вручную, добавьте хук для ежедневного удаления:

if (!wp_next_scheduled('wc_daily_delete_inactive_variations')) {
    wp_schedule_event(time(), 'daily', 'wc_daily_delete_inactive_variations');
}

add_action('wc_daily_delete_inactive_variations', 'wc_delete_inactive_variations');

Для однократного запуска вызовите wc_delete_inactive_variations(); в functions.php и удалите после теста.

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

После запуска функции проверьте, что вариации удалены:

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

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

  • Вариации не удаляются: проверьте права пользователя, от которого запускается код (должен иметь права на удаление записей). Также убедитесь, что wp_delete_post не блокируется плагинами безопасности.
  • Функция запускается слишком часто, нагрузка на сервер: используйте wp_cron с интервалом не чаще раза в сутки. Для больших магазинов можно увеличить интервал или запускать вручную.
  • Удаляются нужные вариации: уточните критерии отбора, например, не просто статус, а также дату последнего обновления или наличие заказов с этой вариацией.

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

  • Перед удалением делайте резервную копию базы данных — это позволит восстановить данные в случае ошибки.
  • Используйте транзакции в SQL, если планируется массовое удаление, чтобы избежать частичного удаления при сбое.
  • Логируйте ID удаляемых вариаций в отдельный файл для аудита.
  • Оптимизируйте базу данных после удаления с помощью WP-CLI или плагинов типа Clearfy Pro (https://wpshop.ru/plugins/clearfy).

Таблица сравнения способов удаления неактивных вариаций

МетодПлюсыМинусыПодходит для
Ручное удаление через админку WooCommerceПростота, контрольДолго при большом количестве вариацийМалые магазины
Код в functions.php + CronАвтоматизация, масштабируемостьТребуется тестирование, возможно удаление нужных вариацийСредние и крупные магазины
Плагины очистки базыУдобный интерфейс, дополнительные функцииЗависимость от стороннего кода, возможные конфликтыВсе уровни, при наличии бюджета
WooCommerce: как автоматически удалять неактивные заказы по дате
29.04.2026
Автоматическое удаление старых записей по метаданным в WordPress с помощью WPcore
28.12.2025
Как удалить авторизацию по email в WordPress и разрешить вход только по логину
19.03.2026
Как создать автоматический импорт из CSV в WordPress
10.01.2026
Как добавить многоуровневое меню в WordPress с помощью кода
13.03.2026