Диагностика проблемы: зачем и когда нужно удалять неактивных клиентов и заказы
В интернет-магазинах на WooCommerce со временем накапливается большое количество учетных записей пользователей, которые давно не заходили и не совершали покупок. Аналогично, часть заказов может быть устаревшими, отмененными или без активности в течение длительного времени. Это увеличивает нагрузку на базу данных, замедляет работу админки и усложняет аналитику.
Причины для удаления неактивных клиентов и заказов:
- Оптимизация базы данных и ускорение загрузки страниц админки;
- Соблюдение GDPR и других требований по хранению персональных данных;
- Поддержание актуальности клиентской базы для маркетинга и рассылок;
- Уменьшение риска накопления мусора и потенциальных ошибок при обновлениях.
Как определить неактивных клиентов и устаревшие заказы в WooCommerce
Неактивным клиентом считаем пользователя, который не заходил на сайт и не совершал заказов больше заданного периода, например, 1 год. Заказы считаются устаревшими, если их статус — отменены, отменены администратором, возвраты или находятся в статусе ожидания оплаты дольше 6 месяцев.
Для диагностики используйте SQL-запросы или плагины для анализа пользователей и заказов, например, WP phpMyAdmin или Adminer.
Пример SQL запроса для поиска неактивных пользователей:
SELECT ID, user_login, user_email, user_registered FROM wp_users WHERE ID NOT IN (SELECT DISTINCT user_id FROM wp_wc_customer_lookup) AND user_registered <= DATE_SUB(NOW(), INTERVAL 1 YEAR);Этот запрос возвращает пользователей, которые не связаны с покупками и зарегистрированы более года назад.
Пример SQL запроса для поиска устаревших заказов:
SELECT ID, post_date, post_status FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-cancelled', 'wc-refunded', 'wc-failed') AND post_date <= DATE_SUB(NOW(), INTERVAL 6 MONTH);Пошаговое решение: автоматизация удаления неактивных клиентов и заказов
Для решения задачи рекомендуем создать кастомный wp-cron, который будет периодически запускать скрипт удаления. Ниже пример реализации на PHP с использованием стандартных функций WordPress и WooCommerce.
1. Добавление задачи в планировщик WordPress (wp-cron)
add_action('wp', function() {
if (!wp_next_scheduled('wpd_cleanup_inactive_customers')) {
wp_schedule_event(time(), 'daily', 'wpd_cleanup_inactive_customers');
}
});2. Функция удаления неактивных клиентов и устаревших заказов
add_action('wpd_cleanup_inactive_customers', function() {
global $wpdb;
// Удаляем неактивных пользователей (нет заказов, зарегистрированы более года назад)
$inactive_users = $wpdb->get_col(
"SELECT ID FROM {$wpdb->users} WHERE ID NOT IN (SELECT DISTINCT user_id FROM {$wpdb->prefix}wc_customer_lookup) AND user_registered <= DATE_SUB(NOW(), INTERVAL 1 YEAR)"
);
foreach ($inactive_users as $user_id) {
wp_delete_user($user_id);
}
// Удаляем устаревшие заказы (отмененные, возвраты, просроченные)
$old_orders = $wpdb->get_col(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status IN ('wc-cancelled', 'wc-refunded', 'wc-failed') AND post_date <= DATE_SUB(NOW(), INTERVAL 6 MONTH)"
);
foreach ($old_orders as $order_id) {
wp_delete_post($order_id, true); // true для полного удаления
}
});3. Добавление возможности ручного запуска через админ-панель
Для удобства добавьте кнопку в админку для запуска очистки без ожидания cron:
add_action('admin_menu', function() {
add_submenu_page('tools.php', 'Очистка неактивных клиентов', 'Очистка клиентов', 'manage_options', 'wpd-cleanup', function() {
if (isset($_POST['wpd_cleanup'])) {
do_action('wpd_cleanup_inactive_customers');
echo '<div class="updated notice">Очистка выполнена.</div>';
}
echo '<form method="post"><input type="submit" name="wpd_cleanup" class="button button-primary" value="Запустить очистку" /></form>';
});
});Проверка результата после внедрения
Чтобы убедиться, что удаление работает корректно:
- Проверьте базу данных — таблицы
wp_usersиwp_postsдолжны не содержать старых пользователей и заказов; - Запустите вручную очистку через админку и посмотрите логи ошибок;
- Убедитесь, что важные пользователи и заказы не удалились — протестируйте на тестовой копии сайта;
- Проверьте наличие wp-cron: в админке или с помощью плагина WP Crontrol.
Частые ошибки и их исправление
- Удаление важных пользователей: Неверно задан период или условие. Рекомендуется тестировать на тестовом сайте и добавлять фильтры, например, исключать администраторов.
- Cron не запускается: На некоторых хостингах wp-cron отключен. Проверяйте наличие cron задачи через WP Crontrol или настройте системный cron на вызов wp-cron.php.
- Удаление заказов не происходит: Возможно, статус заказа указан неверно. Проверьте статусы через
wc_get_order_statuses()и убедитесь, что они совпадают с используемыми в запросе. - Ошибка на больших базах данных: Запросы могут быть тяжелыми. Используйте постраничную обработку (batch processing) и делайте паузы между удалениями.
Практические советы по безопасности и производительности
- Перед удалением обязательно делайте резервное копирование базы данных.
- Удаление больших объемов данных выполняйте в ночное время или в периоды низкой нагрузки.
- Используйте транзакции и проверяйте успешность удаления.
- Для повышения производительности используйте индексы на колонках
user_registeredиpost_date. - Реализуйте логи для отслеживания удаленных пользователей и заказов.
Сравнение вариантов реализации удаления неактивных клиентов и заказов
| Метод | Плюсы | Минусы | Компромисс |
|---|---|---|---|
| Ручное удаление через админку | Простой контроль, не требует кода | Трудоемко, риск ошибки при большом количестве | Использовать вместе с автоматизацией |
| Автоматизация через wp-cron и код | Регулярная очистка без вмешательства | Нужны навыки разработки, риск удаления важных данных | Тестировать на копии, добавлять исключения |
| Плагины очистки базы | Удобство, готовые решения | Могут не учитывать бизнес-логику магазина | Использовать как дополнение, а не единственный метод |