В рамках управления интернет-магазином на WordPress часто возникает необходимость автоматически удалять заказы с определённым статусом, например, отменённые или просроченные. Это помогает поддерживать базу данных в актуальном состоянии и снижать нагрузку на сайт. В этой статье разберём, как автоматизировать удаление заказов по статусу с помощью собственного кода и популярных плагинов.
Причины и задачи автоматического удаления заказов
Интернет-магазины на WooCommerce или других системах заказов в WordPress могут накапливать большое количество заказов в различных статусах: отменённые, в ожидании оплаты, завершённые и т.д. Удаление старых или отменённых заказов позволяет:
- Снизить размер базы данных и ускорить работу сайта;
- Избавиться от неактуальной информации для аналитики и отчетов;
- Упростить администрирование и повысить удобство работы с заказами.
Однако важно делать это аккуратно, чтобы не потерять нужные данные. Поэтому автоматизация должна учитывать статус заказа и период его старения.
Создание автоматического удаления заказов с помощью WP Cron
Для автоматического удаления заказов по статусу можно использовать системный планировщик задач в WordPress — WP Cron. Ниже пример кода, который удаляет заказы со статусом "cancelled" старше 30 дней.
Пример кода удаления заказов по статусу
function wporder_delete_old_cancelled_orders() {
$args = array(
'post_type' => 'shop_order',
'post_status' => 'wc-cancelled',
'date_query' => array(
array(
'column' => 'post_date',
'before' => '30 days ago',
),
),
'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( 'wporder_delete_old_cancelled_orders_event' ) ) {
wp_schedule_event( time(), 'daily', 'wporder_delete_old_cancelled_orders_event' );
}
add_action( 'wporder_delete_old_cancelled_orders_event', 'wporder_delete_old_cancelled_orders' );В этом коде мы создаём задачу, которая каждый день ищет отменённые заказы старше 30 дней и удаляет их. Обратите внимание, что post_status для заказов WooCommerce начинается с префикса wc-.
Расширение функционала: удаление заказов по нескольким статусам и с логом
Иногда нужно удалять заказы не только с одним статусом, а сразу с несколькими. Добавим поддержку массива статусов и ведение лога удалённых заказов.
function wporder_delete_old_orders_by_statuses() {
$statuses = array( 'wc-cancelled', 'wc-failed' ); // статусы для удаления
$args = array(
'post_type' => 'shop_order',
'post_status' => $statuses,
'date_query' => array(
array(
'column' => 'post_date',
'before' => '30 days ago',
),
),
'posts_per_page' => -1,
'fields' => 'ids',
);
$orders = get_posts( $args );
$deleted_orders = array();
foreach ( $orders as $order_id ) {
if ( wp_delete_post( $order_id, true ) ) {
$deleted_orders[] = $order_id;
}
}
if ( ! empty( $deleted_orders ) ) {
error_log( 'WPOrder удалено заказов: ' . implode( ',', $deleted_orders ) );
}
}
add_action( 'wporder_delete_old_cancelled_orders_event', 'wporder_delete_old_orders_by_statuses' );Такой подход удобен для мониторинга и отладки, так как в лог попадает список удалённых заказов.
Использование плагинов для автоматизации удаления заказов
Если вы не хотите писать код, есть плагины, которые помогут настроить автоматическое удаление заказов:
- WP Bulk Delete — позволяет удалять посты, включая заказы, по условию, в том числе по статусу и дате.
- Advanced Database Cleaner — помогает очищать таблицы и удалять устаревшие данные, включая заказы WooCommerce.
- Clearfy Pro — расширенный инструмент оптимизации, который среди прочего позволяет управлять удалением данных и кэшированием. Подробнее на wpshop.ru.
Настройка таких плагинов обычно интуитивна и позволяет задать период удаления, статусы и другие параметры без программирования.
Советы по безопасному удалению заказов
Удаление заказов — ответственная задача, поэтому придерживайтесь рекомендаций:
- Всегда делайте резервные копии базы данных перед массовыми удалениями.
- Тестируйте код или настройки на тестовом сайте перед применением в продакшене.
- Сохраняйте важные данные, например, для бухгалтерии, в отдельной системе или в виде отчетов.
- Используйте безопасные методы удаления, чтобы избежать повреждения базы данных.
Заключение
Автоматическое удаление заказов по статусу в WordPress помогает поддерживать сайт в порядке и оптимизировать работу базы данных. С помощью WP Cron и собственного кода можно реализовать гибкую систему, а готовые плагины упростят задачу для пользователей без навыков программирования. Важно подходить к удалению ответственно, чтобы не потерять нужные данные.