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

Диагностика проблемы с накоплением старых вариантов товаров

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

Признаки проблемы:

  • Заметное замедление работы административной панели при редактировании товаров.
  • Увеличенный размер базы данных без видимых причин.
  • Наличие в базе товаров, которых давно нет в каталоге, но их вариации остались.

Как проверить наличие старых вариантов товаров

Для диагностики можно использовать SQL-запрос к базе данных, чтобы найти вариации, которые не были обновлены или использованы более определённого времени (например, 1 год):

SELECT p.ID, p.post_title, p.post_modified FROM wp_posts p
WHERE p.post_type = 'product_variation'
AND p.post_modified < DATE_SUB(NOW(), INTERVAL 1 YEAR);

Этот запрос выведет все вариации, которые не обновлялись более года и потенциально являются устаревшими.

Пошаговое решение удаления старых вариантов товаров по срокам

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

Перед любыми операциями с базой данных обязательно сделайте резервную копию. Для этого можно использовать плагины, например, UpdraftPlus или выполнять дамп базы через phpMyAdmin.

Шаг 2. Добавление пользовательской функции для удаления старых вариаций

В functions.php вашей темы (или в отдельном плагине) добавьте следующий код, который удалит вариации, не обновлявшиеся более 365 дней:

function delete_old_product_variations() {
    global $wpdb;
    
    $threshold_date = date('Y-m-d H:i:s', strtotime('-365 days'));
    
    // Получаем ID старых вариаций
    $old_variations = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product_variation' AND post_modified < %s",
        $threshold_date
    ));

    if (!empty($old_variations)) {
        foreach ($old_variations as $variation_id) {
            wp_delete_post($variation_id, true); // Принудительно удалить без перемещения в корзину
        }
    }
}

Шаг 3. Запуск удаления через WP-CLI или крон

Для безопасного запуска можно выполнить функцию через WP-CLI:

wp eval 'delete_old_product_variations();'

Или настроить WP-Cron для регулярного удаления:

if (!wp_next_scheduled('delete_old_variations_event')) {
    wp_schedule_event(time(), 'daily', 'delete_old_variations_event');
}
add_action('delete_old_variations_event', 'delete_old_product_variations');

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

После запуска скрипта проверьте базу данных повторным SQL-запросом:

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product_variation' AND post_modified < DATE_SUB(NOW(), INTERVAL 1 YEAR);

Результат должен быть 0 или значительно меньше, чем до удаления.

Также проверьте, что товары и их актуальные вариации отображаются корректно в административной панели и на сайте.

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

  • Ошибка: Вариации не удаляются.
    Причина: Недостаточно прав пользователя или неправильный ID базы.
    Исправление: Проверить права доступа, убедиться, что функция вызывается от имени администратора.
  • Ошибка: Удаляются нужные вариации.
    Причина: Неправильно задан срок фильтрации.
    Исправление: Проверьте точность даты в переменной $threshold_date, при необходимости уменьшите интервал.
  • Ошибка: Сайт замедляется при выполнении.
    Причина: Большое количество вариаций удаляется сразу.
    Исправление: Делать удаление пакетами (например, по 50 штук за раз).

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

  • Используйте транзакции и пакетное удаление для минимизации нагрузки на базу данных.
  • Запускайте удаление в периоды низкой посещаемости сайта.
  • Обязательно тестируйте на копии сайта, чтобы не потерять важные данные.
  • Для крупных магазинов рассмотрите использование WP-CLI для запуска скриптов вне веб-сессии.

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

МетодПлюсыМинусыКогда использовать
SQL-запросы напрямуюБыстрое удаление, без нагрузки на WPРиск повредить данные, требует SQL знанийДля опытных пользователей и больших баз
PHP-функция с wp_delete_post()Безопасно, триггерит все хуки WPМожет быть медленнее при большом объемеСтандартные случаи, интеграция с WP
Плагины очистки базыПростота использованияМогут удалять лишнее, не всегда гибкоДля быстрой чистки без кастомизации

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как автоматизировать размещение контента в WordPress с помощью WPRemark
10.04.2026
Как удалить неиспользуемые метаданные в WordPress для оптимизации базы данных
20.01.2026
Автоматическое удаление товаров из корзины WooCommerce по таймеру: практическое руководство
04.06.2026
Как создать автоматический раздел для новостей в WordPress с фильтрацией по категориям
25.12.2025
Как удалить старые варианты товаров из WooCommerce по срокам
12.06.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее