Диагностика проблемы: зачем удалять старые варианты товаров в 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.phpWP-CLI выведет список удалённых вариантов. Процесс может занять время на больших магазинах.
Проверка результата после внедрения
Чтобы убедиться, что скрипт сработал:
- В админке WooCommerce проверьте количество вариаций под товарами — оно должно уменьшиться;
- Попробуйте создать заказ с удалённым вариантом — его не будет в списке;
- Проверьте логи выполнения скрипта в терминале.
Частые ошибки и как их исправить
- Вариации не удаляются: проверьте, что WP-CLI запускается с правами пользователя, имеющего доступ к WordPress и WooCommerce;
- Удаляются не те варианты: проверьте логику поиска заказов и корректность даты в параметре
date_paid_min; - Долгое выполнение скрипта: разбейте удаление на партии, добавив пагинацию в запрос
get_posts; - Потеря данных: всегда делайте резервную копию до операции.
Практические советы по безопасности и производительности
- Используйте WP-CLI или отдельный PHP-скрипт, запускаемый из командной строки, чтобы не нагружать сайт при работе пользователей;
- Проводите удаление на тестовом сервере перед продакшеном;
- Добавьте логирование удалённых вариантов в отдельный файл для отслеживания;
- Для больших магазинов разбейте задачу на части (например, по 100 вариантов за раз);
- Проверяйте наличие связанных данных (например, пользовательские мета вариаций), чтобы не оставить «мусор» в базе;
- Регулярно очищайте базу от устаревших записей и оптимизируйте таблицы MySQL.
Сравнение способов удаления старых вариаций
| Способ | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Ручное удаление через админку | Просто, без кода | Долго, риск ошибок при большом количестве | Мало вариаций |
| Плагин для массового редактирования | Удобный интерфейс, фильтры | Дополнительная нагрузка, возможны конфликты | Средний объём вариаций |
| Скрипт с WP-CLI (как в статье) | Автоматизация, высокая скорость, гибкость | Требует технических знаний и доступа к серверу | Большие магазины, регулярное обслуживание |