Как сделать автоматическое удаление старых вариантов товаров в WooCommerce

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

При ведении интернет-магазина на WooCommerce часто появляются старые, неактуальные варианты товаров (вариации), которые уже не продаются или сняты с производства, но остаются в базе данных. Это приводит к путанице для менеджеров, замедлению работы админки и увеличению размера базы данных. Стандартных инструментов для массового удаления таких вариантов в WooCommerce нет, поэтому нужна автоматизация.

Как определить, какие варианты товаров можно удалять автоматически

Чаще всего старые варианты — это те, которые:

  • Не имеют заказов за долгое время (например, 6 месяцев);
  • Отмечены в метаполях как устаревшие;
  • Имеют нулевой остаток на складе и не планируются к пополнению.

В этом руководстве мы рассмотрим вариант удаления вариаций без заказов за последние 6 месяцев.

Пошаговое решение: автоматическое удаление старых вариантов с помощью WP-CLI

WP-CLI — это отличный инструмент для выполнения массовых операций в WordPress из командной строки, что безопаснее и удобнее, чем делать это через админку.

Шаг 1. Создайте резервную копию сайта и базы данных

Прежде чем запускать массовые удаления, сделайте полный бэкап, чтобы восстановиться в случае ошибки.

Шаг 2. Подготовьте PHP-скрипт для поиска и удаления старых вариантов

Создайте файл delete-old-variations.php в корне сайта с таким кодом:

<?php
// Задаём дату - 6 месяцев назад
$cutoff_date = date('Y-m-d H:i:s', strtotime('-6 months'));

// Получаем все вариации товаров
$args = [
    'post_type' => 'product_variation',
    'posts_per_page' => -1,
    'post_status' => 'publish',
];
$variations = get_posts($args);

foreach ($variations as $variation) {
    $orders = wc_get_orders([
        'limit' => 1,
        'status' => 'completed',
        'date_paid_min' => $cutoff_date,
        'product_id' => $variation->ID
    ]);

    // Если заказов с этим вариантом за последние 6 месяцев нет - удаляем
    if (empty($orders)) {
        wp_delete_post($variation->ID, true);
        echo "Удалён вариант ID: {$variation->ID}\n";
    }
}

Этот скрипт перебирает все вариации, ищет завершённые заказы с оплатой за последние 6 месяцев с этим вариантом, и если таких нет — удаляет вариант.

Шаг 3. Запустите скрипт через WP-CLI

В терминале, в корне сайта выполните:

wp eval-file delete-old-variations.php

WP-CLI выведет список удалённых вариантов. Процесс может занять время на больших магазинах.

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

Чтобы убедиться, что скрипт сработал:

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

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

  • Вариации не удаляются: проверьте, что WP-CLI запускается с правами пользователя, имеющего доступ к WordPress и WooCommerce;
  • Удаляются не те варианты: проверьте логику поиска заказов и корректность даты в параметре date_paid_min;
  • Долгое выполнение скрипта: разбейте удаление на партии, добавив пагинацию в запрос get_posts;
  • Потеря данных: всегда делайте резервную копию до операции.

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

  • Используйте WP-CLI или отдельный PHP-скрипт, запускаемый из командной строки, чтобы не нагружать сайт при работе пользователей;
  • Проводите удаление на тестовом сервере перед продакшеном;
  • Добавьте логирование удалённых вариантов в отдельный файл для отслеживания;
  • Для больших магазинов разбейте задачу на части (например, по 100 вариантов за раз);
  • Проверяйте наличие связанных данных (например, пользовательские мета вариаций), чтобы не оставить «мусор» в базе;
  • Регулярно очищайте базу от устаревших записей и оптимизируйте таблицы MySQL.

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

СпособПлюсыМинусыКогда использовать
Ручное удаление через админкуПросто, без кодаДолго, риск ошибок при большом количествеМало вариаций
Плагин для массового редактированияУдобный интерфейс, фильтрыДополнительная нагрузка, возможны конфликтыСредний объём вариаций
Скрипт с WP-CLI (как в статье)Автоматизация, высокая скорость, гибкостьТребует технических знаний и доступа к серверуБольшие магазины, регулярное обслуживание
Как избежать конфликтов между плагинами в WordPress
06.03.2026
Автоматическое отключение товаров в WooCommerce при отсутствии на складе
07.07.2026
Как автоматически удалить все неоплаченные заказы в WooCommerce через код
06.06.2026
Как программно удалить заказы со статусом «Отменён» в WooCommerce
10.05.2026
Как использовать AJAX в WordPress для динамического обновления контента
20.02.2026