Автоматическое удаление старых товаров и заказов WooCommerce по дате

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

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

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

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

1. Подготовка: резервное копирование и тестирование

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

2. Удаление старых товаров программно

Ниже пример функции, которая удаляет товары WooCommerce старше заданного количества дней — например, 90 дней:

function wpguest_delete_old_products( $days = 90 ) {
    $date_query = array(
        'column' => 'post_date',
        'before' => date('Y-m-d', strtotime("-" . $days . " days")),
        'inclusive' => true,
    );

    $args = array(
        'post_type' => 'product',
        'post_status' => 'publish',
        'date_query' => array( $date_query ),
        'posts_per_page' => -1,
        'fields' => 'ids',
    );

    $old_products = get_posts( $args );

    foreach ( $old_products as $product_id ) {
        wp_delete_post( $product_id, true ); // true - без возможности восстановления
    }

    return count( $old_products );
}

Для запуска функции можно использовать WP-CLI, добавить cron-задачу или временно вызвать через админку.

3. Удаление старых заказов WooCommerce

Заказы хранятся в типе записи shop_order. Пример удаления заказов старше 180 дней:

function wpguest_delete_old_orders( $days = 180 ) {
    $date_query = array(
        'column' => 'post_date',
        'before' => date('Y-m-d', strtotime("-" . $days . " days")),
        'inclusive' => true,
    );

    $args = array(
        'post_type' => 'shop_order',
        'post_status' => array('wc-completed', 'wc-cancelled', 'wc-refunded'), // можно указать нужные статусы
        'date_query' => array( $date_query ),
        'posts_per_page' => -1,
        'fields' => 'ids',
    );

    $old_orders = get_posts( $args );

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

    return count( $old_orders );
}

Как проверить, что удаление прошло успешно

  • Перед удалением посчитайте количество товаров и заказов по дате с помощью аналогичных запросов get_posts.
  • Запустите функцию и сохраните возвращаемое количество удалённых элементов.
  • Сравните оставшееся количество товаров и заказов с первоначальным — оно должно уменьшиться.
  • Проверьте работу сайта, корректность отображения каталога и заказов.

Чек-лист для безопасной автоматизации удаления

  • Создать резервную копию сайта и базы данных.
  • Выбрать корректные значения для периода удаления (например, 90 дней для товаров, 180 для заказов).
  • Тестировать на тестовом сайте или в staging-среде.
  • Обеспечить логирование выполненных операций, чтобы видеть сколько записей удалено.
  • Настроить периодичность запуска через WP-Cron или системный cron.

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

  • Удаление нужных товаров или заказов: Проверьте правильность фильтрации по дате и статусу, добавьте дополнительную проверку по метаданным.
  • Функция не удаляет записи: Убедитесь, что используется wp_delete_post с параметром true для полного удаления, а не в корзину.
  • Высокая нагрузка при удалении большого числа записей: Делите удаление на партии по 50-100 записей с паузами или через крон.
  • Ошибки прав доступа: Функция должна запускаться с правами администратора или через WP-CLI.

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

  • Для больших сайтов используйте WP-CLI для пакетного удаления без нагрузки на фронтенд.
  • Регистрируйте пользовательские логи удаления в отдельный файл с датой и количеством удалённых объектов.
  • Ограничьте права доступа, чтобы случайно никто не запустил удаление вручную.
  • Оптимизируйте базу данных после удаления через OPTIMIZE TABLE или соответствующие плагины.
  • Если нужны более гибкие сценарии, рассмотрите использование плагина Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpguest.ru&utm_medium=article&utm_campaign=kak-avtomatizirovat-udaleniye-starogo-kontenta-woocommerce) с функцией автоматического удаления устаревших записей.

Сравнение подходов: код vs плагины для удаления старого контента WooCommerce

МетодПреимуществаНедостаткиКогда использовать
Код (PHP + WP-CLI)Полный контроль, без лишних плагинов, можно интегрировать в cronТребует знаний, риски при ошибках, нужно тестироватьРазработчикам, с опытом WP и серверной админки
Плагины (например, Clearfy Pro)Простота настройки, интерфейс, автоматизация без кодаДополнительная нагрузка, возможность конфликтовДля пользователей без навыков программирования, быстрое решение
Хук WooCommerce 'woocommerce_order_status_changed': практическое применение для автоматизации
16.05.2026
Как избежать ошибки 429 в WooCommerce при автообновлении корзины
19.04.2026
Как отключить AJAX подгрузку комментариев в WordPress
02.02.2026
Как установить ограничение на размер файлов при загрузке в WordPress
10.01.2026
Автоматизация изменения изображений при загрузке в WordPress на WPGuest
06.12.2025