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

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

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

Проверить объем старого контента можно через админку WooCommerce или напрямую в базе данных. Например, для заказов можно выполнить SQL-запрос:

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

Аналогично для товаров (post_type = 'product'). Если результат высокий — пора оптимизировать.

Пошаговое решение: удаление старого контента WooCommerce по дате через WP-CLI и PHP

1. Резервное копирование

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

2. Автоматизация удаления заказов старше года через WP-CLI

WP-CLI позволяет быстро удалять посты по условию. Пример команды для удаления заказов старше года:

wp post delete $(wp post list --post_type=shop_order --date_query_column=post_date --before='1 year ago' --format=ids) --force
<

Опция --force удаляет заказы без помещения в корзину.

3. Скрипт удаления старых товаров через PHP

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

function wpguest_delete_old_products() {
    $args = [
        'post_type'      => 'product',
        'date_query'     => [
            [
                'before'    => '2 years ago',
                'inclusive' => true,
            ],
        ],
        'posts_per_page' => -1,
        'fields'        => 'ids',
        'post_status'    => 'publish',
    ];
    $old_products = get_posts($args);

    foreach ($old_products as $product_id) {
        wp_delete_post($product_id, true); // true - без перемещения в корзину
    }
}
// Запуск при кроне или вручную
// wpguest_delete_old_products();

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

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

  • Через админку WooCommerce уменьшилось количество заказов и товаров.
  • SQL-запросами убедитесь, что старые записи ушли:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_date < DATE_SUB(NOW(), INTERVAL 1 YEAR);
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product' AND post_date < DATE_SUB(NOW(), INTERVAL 2 YEAR);

Если количество равно нулю или значительно сократилось — задача решена.

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

  • Ошибка: Удаление не происходит из-за прав доступа.
    Решение: Убедитесь, что WP-CLI запускается с правами пользователя, имеющего доступ к базе данных, или что PHP-скрипт запускается от имени администратора.
  • Ошибка: Проблемы с производительностью при удалении большого количества записей.
    Решение: Разбейте удаление на партии, например, по 100 записей, чтобы избежать таймаутов и перегрузки базы данных.
  • Ошибка: Удаляются не только нужные записи, а больше.
    Решение: Проверьте параметры date_query и используйте тестовые выборки get_posts перед удалением.

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

  • Всегда делайте резервные копии перед массовыми изменениями.
  • Используйте WP-CLI для массовых операций — это быстрее и безопаснее, чем через админку.
  • Для регулярного удаления используйте CRON-задачи, вызывающие PHP-функции с удалением по партиям.
  • При удалении товаров учитывайте связанные данные: мета, вариации, отзывы.
  • Оптимизируйте таблицы базы после удаления: OPTIMIZE TABLE wp_posts; и wp_postmeta.

Сравнение вариантов автоматизации удаления старого контента WooCommerce

МетодПлюсыМинусыПодходит для
WP-CLIБыстро, без нагрузки на сайт, можно запускать из консолиТребует доступа к серверу и командной строкеАдминистраторы с доступом к серверу
PHP-скрипт с get_posts и wp_delete_postГибко, можно интегрировать в сайт и запускать по расписаниюРиск таймаутов при большом объеме, требуется кодингРазработчики и специалисты по автоматизации
Плагины для очистки базыПростота использования, интерфейсМогут быть тяжелыми и не всегда точнымиПользователи без навыков программирования
Как автоматизировать удаление старых записей WordPress по дате
01.03.2026
Как отключить AJAX подгрузку комментариев в WordPress
02.02.2026
Как создать собственный shortcode для WordPress
27.11.2025
Как автоматизировать управление ролями пользователей в WordPress с помощью кода и плагинов
12.04.2026
Автоматизация создания резервных копий WordPress без плагинов
06.12.2025