Диагностика проблемы: зачем и когда нужна автоматизация удаления старого контента 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) | Простота настройки, интерфейс, автоматизация без кода | Дополнительная нагрузка, возможность конфликтов | Для пользователей без навыков программирования, быстрое решение |