Диагностика проблемы: зачем и когда удалять неактивные вариации товаров
В магазинах на WooCommerce с большим ассортиментом часто накапливаются вариации товаров, которые не продаются и не обновляются длительное время. Это негативно влияет на производительность, увеличивает размер базы данных и усложняет администрирование. Особенно актуально, если вариации создаются автоматически или импортируются из внешних источников.
Неактивные вариации — это те, что не были куплены и не обновлялись, например, более 6 месяцев. Удаление таких записей помогает уменьшить нагрузку на запросы и ускорить бэкапы.
Пошаговое решение: как автоматически удалять неактивные вариации товаров по дате
Шаг 1. Определение критериев отбора
Для удаления будем использовать дату последнего обновления вариации (post_modified) или дату последней покупки (если доступна). В этом примере реализуем удаление по дате обновления вариации — если она не менялась больше 180 дней.
Шаг 2. Создание PHP-функции для удаления
Добавьте в файл functions.php вашей активной темы или создайте небольшой плагин с таким кодом:
function wpcore_delete_old_inactive_variations() {
global $wpdb;
$days_inactive = 180; // количество дней без обновления
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days_inactive} days"));
// Получаем ID вариаций (post_type = 'product_variation'), не обновлявшихся более 180 дней
$variation_ids = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product_variation' AND post_modified < %s",
$date_threshold
));
if (!empty($variation_ids)) {
foreach ($variation_ids as $variation_id) {
// Проверяем, что вариация не связана с активным заказом (опционально)
// Можно добавить дополнительную проверку наличия заказов с этим товаром
// Удаляем вариацию
wp_delete_post($variation_id, true); // true — без помещения в корзину
}
}
}
// Запускаем функцию через WP-Cron раз в неделю
add_action('wpcore_weekly_variation_cleanup', 'wpcore_delete_old_inactive_variations');
function wpcore_setup_weekly_event() {
if (!wp_next_scheduled('wpcore_weekly_variation_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wpcore_weekly_variation_cleanup');
}
}
add_action('wp', 'wpcore_setup_weekly_event');Шаг 3. Тестирование функции вручную
Для проверки можно запустить функцию вручную, вызвав wpcore_delete_old_inactive_variations(); в functions.php (временно) или через WP-CLI:
wp eval 'wpcore_delete_old_inactive_variations();'Перед этим убедитесь, что у вас есть резервная копия базы данных.
Проверка результата после внедрения
1. Зайдите в админку WooCommerce –> Товары –> Вариации и проверьте количество вариаций до и после запуска скрипта.
2. Выполните SQL-запрос напрямую в базе, чтобы убедиться, что нет вариаций, у которых post_modified старше 180 дней:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product_variation' AND post_modified < DATE_SUB(NOW(), INTERVAL 180 DAY);Если возвращается 0, значит старые вариации успешно удалены.
Частые ошибки и как их исправить
- Удаление нужных вариаций: если в магазине есть вариации, которые не обновлялись долго, но нужны (например, архивные), добавьте дополнительную логику или метаполя для исключения их из удаления.
- Потеря данных заказов: не удаляйте вариации, связанные с активными или завершёнными заказами. Для этого можно дополнительно проверить таблицы заказов WooCommerce (
wp_woocommerce_order_itemsиwp_woocommerce_order_itemmeta). - Отсутствие Cron: WP-Cron запускается при посещении сайта. Если трафика мало, можно настроить системный cron для запуска
wp-cron.phpпо расписанию.
Практические советы по безопасности и производительности
- Всегда делайте резервную копию базы данных перед массовым удалением записей.
- Добавьте логирование удалённых вариаций (через error_log или в отдельный файл), чтобы отслеживать изменения.
- Используйте
wp_delete_postс параметромtrue, чтобы полностью удалить вариацию без помещения в корзину. - Для больших магазинов с тысячами вариаций запускайте удаление пакетами, чтобы избежать таймаутов.
- Оптимизируйте базу данных после удаления (через phpMyAdmin или WP-CLI команду
wp db optimize).
Сравнение вариантов реализации удаления неактивных вариаций
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
| Ручное удаление через админку | Просто, не требует кода | Долго, не подходит для большого количества | WooCommerce > Товары > Вариации |
| Плагин очистки базы | Автоматизация, удобный интерфейс | Дополнительная нагрузка, возможны конфликты | Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpcore.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-udalenie-neaktivnyh-variantov-tovarov-po-datam) |
| Код на PHP с WP-Cron | Гибкость, контроль, без плагинов | Требует навыков, нужно тестировать | Пример из статьи выше |