В крупном интернет-магазине на WooCommerce с течением времени база данных может значительно разрастаться из-за большого количества заказов. Старые, завершённые или отменённые заказы, которые уже не нужны для бизнеса, могут замедлять работу сайта и увеличивать размер базы. В этой статье мы разберём, как автоматизировать процесс удаления таких заказов по дате и статусу, используя как готовые плагины, так и собственные решения на PHP.
Почему важно удалять старые заказы в WooCommerce
WooCommerce по умолчанию не удаляет заказы после их обработки, что ведёт к постоянному накоплению данных. Это сказывается на производительности сайта, увеличивает время бэкапов и поиск по базе данных. Особенно актуально для магазинов с тысячами заказов.
Удаление старых заказов помогает:
- Снизить нагрузку на базу данных;
- Уменьшить размер экспортируемых данных;
- Ускорить работу административной панели;
- Облегчить процесс резервного копирования.
Но при этом важно сохранить данные заказчиков и финансовую отчётность, поэтому удалять стоит только те заказы, которые точно не нужны.
Удаление заказов по статусу и дате: какие статусы можно удалять
В WooCommerce заказам присвоены статусы, такие как completed (завершён), cancelled (отменён), failed (неудачный), refunded (возврат) и другие. Обычно для удаления подходят заказы со статусами cancelled, failed, а также completed, если они старше определённого срока.
Рекомендуется не удалять заказы с активным статусом processing или on-hold, так как они могут быть в процессе оплаты или доставки.
Пример выбора заказов для удаления:
- Заказы со статусом
completedстарше 1 года; - Заказы со статусом
cancelledилиfailedстарше 6 месяцев; - Заказы со статусом
refundedстарше 1 года.
Автоматизация удаления заказов с помощью собственного кода
Создадим функцию, которая будет запускаться через WP-Cron по расписанию и удалять заказы, соответствующие условиям. Это позволит выполнять очистку базы без ручного вмешательства.
Пример кода для functions.php или отдельного плагина:
function wpdetect_delete_old_woocommerce_orders() {
if ( ! class_exists( 'WooCommerce' ) ) {
return; // WooCommerce не активен
}
$statuses_to_delete = array( 'cancelled', 'failed', 'refunded' );
$date_completed = date( 'Y-m-d H:i:s', strtotime( '-6 months' ) ); // Порог по дате
// Получаем заказы для удаления
$args = array(
'post_type' => 'shop_order',
'post_status' => array_map( function($status) {
return 'wc-' . $status;
}, $statuses_to_delete ),
'date_query' => array(
array(
'column' => 'post_date',
'before' => $date_completed,
),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$orders = get_posts( $args );
foreach ( $orders as $order_id ) {
wp_delete_post( $order_id, true ); // Удаляем навсегда
}
}
// Регистрируем событие WP-Cron
if ( ! wp_next_scheduled( 'wpdetect_delete_old_orders_event' ) ) {
wp_schedule_event( time(), 'daily', 'wpdetect_delete_old_orders_event' );
}
add_action( 'wpdetect_delete_old_orders_event', 'wpdetect_delete_old_woocommerce_orders' );Этот код ежедневно проверяет и удаляет заказы со статусами cancelled, failed и refunded старше 6 месяцев. Можно дополнительно добавить логи для отслеживания удалений.
Удаление заказов со статусом completed старше 1 года
Для заказов с завершённым статусом, которые обычно важны для отчётности, можно сделать отдельную функцию с более длинным сроком:
function wpdetect_delete_completed_orders_older_than_year() {
if ( ! class_exists( 'WooCommerce' ) ) {
return;
}
$date_completed = date( 'Y-m-d H:i:s', strtotime( '-1 year' ) );
$args = array(
'post_type' => 'shop_order',
'post_status' => 'wc-completed',
'date_query' => array(
array(
'column' => 'post_date',
'before' => $date_completed,
),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$orders = get_posts( $args );
foreach ( $orders as $order_id ) {
wp_delete_post( $order_id, true );
}
}
add_action( 'wpdetect_delete_old_completed_orders_event', 'wpdetect_delete_completed_orders_older_than_year' );
if ( ! wp_next_scheduled( 'wpdetect_delete_old_completed_orders_event' ) ) {
wp_schedule_event( time(), 'weekly', 'wpdetect_delete_old_completed_orders_event' );
}Использование плагинов для удаления заказов в WooCommerce
Если писать код не хочется, можно воспользоваться готовыми плагинами:
- Woo Delete Old Orders — позволяет удалять заказы по статусу и дате с удобным интерфейсом;
- Clearfy Pro — многофункциональный плагин для оптимизации сайта, включая удаление старых заказов.
Плагины часто имеют дополнительные функции, например, удаление связанных мета-данных, кэширование и отчёты, что полезно для комплексной оптимизации.
Рекомендации по безопасности и резервному копированию
Перед автоматическим удалением заказов обязательно делайте резервные копии базы данных. Для этого подойдёт плагин WPDetect, который умеет создавать автоматические бэкапы и отслеживать изменения.
Также рекомендуем запускать удаление старых заказов в часы низкой нагрузки, чтобы избежать замедления работы сайта для пользователей.
Выводы и практические советы
Автоматизация удаления старых заказов в WooCommerce — важная задача для поддержания производительности и оптимизации базы данных. Вы можете реализовать это как с помощью кода, так и с помощью плагинов. Главное — чётко определить, какие заказы удалять, и обеспечить резервное копирование перед удалениями.
Используйте WP-Cron для запуска регулярных задач, добавляйте логи и уведомления, чтобы контролировать процесс. Если нужен удобный интерфейс и дополнительные функции, выбирайте проверенные плагины с хорошими отзывами.