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

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

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

Какие типы данных следует удалять в WooCommerce

Для оптимизации базы стоит сфокусироваться на следующих типах контента:

  • Заказы со статусами: отменённые (cancelled), завершённые (completed), неактивные (старые по дате).
  • Черновики и авто-сохранения товаров: временные записи, которые не публикуются.
  • Неиспользуемые вариации товаров: вариации без атрибутов или с нулевым остатком, которые не продаются.
  • Оставшиеся метаданные и транзиенты: устаревшие метаполя и кэшированные данные.

Пошаговое решение: автоматическое удаление старого контента без плагинов

1. Создание функции очистки заказов по дате и статусу

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

function wpcore_delete_old_orders() {
    global $wpdb;
    $statuses = ['cancelled', 'completed'];
    $days = 90; // удаляем заказы старше 90 дней
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    foreach ($statuses as $status) {
        // Получаем ID заказов
        $order_ids = $wpdb->get_col($wpdb->prepare(
            "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status = %s AND post_date < %s",
            'wc-' . $status,
            $date_threshold
        ));

        foreach ($order_ids as $order_id) {
            wp_delete_post($order_id, true);
        }
    }
}

2. Создание функции удаления неактивных вариаций товаров

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

function wpcore_delete_inactive_variations() {
    global $wpdb;
    $variations = $wpdb->get_col(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product_variation'"
    );

    foreach ($variations as $variation_id) {
        $attributes = get_post_meta($variation_id, '_product_attributes', true);
        $stock = get_post_meta($variation_id, '_stock', true);

        if ((empty($attributes) || $attributes === 'a:0:{}') && intval($stock) <= 0) {
            wp_delete_post($variation_id, true);
        }
    }
}

3. Планирование запуска через Cron

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

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

add_action('wpcore_cleanup_cron', function() {
    wpcore_delete_old_orders();
    wpcore_delete_inactive_variations();
});

Как проверить, что решение работает

  • Перед внедрением сделайте резервную копию базы данных.
  • Выполните функции вручную, вызвав их через do_action или временно вызвав в functions.php.
  • Проверьте таблицы wp_posts и убедитесь, что старые заказы и вариации удалены.
  • Проверьте логи ошибок и производительность сайта (время загрузки, отклик сервера).
  • С помощью WP-CLI можно выполнить запросы для подсчёта количества заказов и вариаций до и после очистки.

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

  • Удаление не того статуса заказов: Проверяйте точные статусы (например, wc-cancelled, wc-completed), иначе заказы не будут удаляться.
  • Неправильный формат даты: Используйте формат Y-m-d H:i:s для сравнения с post_date.
  • Удаление активных товаров: Тщательно проверьте условия удаления вариаций, чтобы не потерять важные данные.
  • Отсутствие резервного копирования: Всегда делайте бэкап перед массовыми удалениями.
  • Планировщик Cron не работает: Проверьте, активен ли WP-Cron и не блокируют ли его серверные настройки.

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

  • Перед удалением большого объёма данных разбивайте операции на части, чтобы снизить нагрузку на сервер.
  • Используйте транзакции в MySQL при необходимости для консистентности данных.
  • Регулярно оптимизируйте таблицы базы данных с помощью SQL-команды OPTIMIZE TABLE wp_posts;.
  • Используйте плагины типа Clearfy Pro для комплексной очистки и SEO-оптимизации.
  • Ограничьте права доступа для пользователей, которые могут запускать очистку, чтобы исключить случайные удаления.

Сравнение подходов к удалению старого контента

МетодПлюсыМинусы
Ручные SQL-запросыБыстро и эффективно при знании SQLРиск ошибок и потери данных, необходимость бэкапа
PHP-код с WP-функциями (как выше)Безопасно, можно интегрировать в CronМожет быть медленнее, требует временных затрат на отладку
Плагины для очисткиУдобно, много функций "из коробки"Дополнительная нагрузка, риск конфликтов, платные версии
Как безопасно удалить старые записи по метаданным в WordPress
20.01.2026
WooCommerce: как автоматически удалять неактивные вариации товаров без плагинов
06.06.2026
Как создать автоматический импорт из CSV в WordPress
10.01.2026
Как создать автоматическое отправление email при новом комментарии в WordPress
21.02.2026
WooCommerce: как автоматически удалять неактивные заказы по дате
29.04.2026