Почему важно удалять неактивные регистрации в WooCommerce
Неактивные или брошенные регистрации пользователей в WooCommerce создают нагрузку на базу данных, увеличивают объем резервных копий и могут стать источником спама или мошенничества. Автоматическое удаление таких аккаунтов позволяет поддерживать чистоту базы данных и оптимизировать производительность сайта.
Диагностика проблемы: как определить неактивные регистрации
Неактивным пользователем считаем того, кто зарегистрировался, но не подтвердил email, не совершил покупок и не заходил на сайт более 30 дней. Для диагностики используйте SQL-запрос:
SELECT ID, user_login, user_email, user_registered FROM wp_users WHERE user_registered < DATE_SUB(NOW(), INTERVAL 30 DAY) AND ID NOT IN (SELECT user_id FROM wp_wc_customer_lookup) AND ID NOT IN (SELECT user_id FROM wp_usermeta WHERE meta_key = 'last_login' AND meta_value > DATE_SUB(NOW(), INTERVAL 30 DAY));Этот запрос покажет потенциально неактивных пользователей.
Пошаговое решение: как автоматически удалять неактивных пользователей
1. Создаем функцию удаления неактивных пользователей
function wptricks_delete_inactive_users() {
global $wpdb;
$threshold = 30; // дней неактивности
$date_limit = date('Y-m-d H:i:s', strtotime("-{$threshold} days"));
// Получаем ID неактивных пользователей
$user_ids = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->users} WHERE user_registered < %s",
$date_limit
));
foreach ($user_ids as $user_id) {
// Проверяем, что пользователь не покупал и не заходил
$has_orders = (bool) wc_get_customer_order_count($user_id);
$last_login = get_user_meta($user_id, 'last_login', true);
if (!$has_orders && (!$last_login || $last_login < $date_limit)) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user($user_id);
}
}
}2. Добавляем CRON-задачу для запуска функции ежедневно
if (!wp_next_scheduled('wptricks_daily_inactive_user_cleanup')) {
wp_schedule_event(time(), 'daily', 'wptricks_daily_inactive_user_cleanup');
}
add_action('wptricks_daily_inactive_user_cleanup', 'wptricks_delete_inactive_users');3. Обработка last_login (опционально)
Для отслеживания последнего входа используйте плагин или добавьте код для обновления мета при логине:
function wptricks_update_last_login($login, $user) {
update_user_meta($user->ID, 'last_login', current_time('mysql'));
}
add_action('wp_login', 'wptricks_update_last_login', 10, 2);Проверка результата после внедрения
- Запустите CRON вручную через WP-CLI:
wp cron event run wptricks_daily_inactive_user_cleanup - Проверьте, что пользователи, соответствующие условиям, удалены в админке WooCommerce и в базе данных
- Отследите логи ошибок и убедитесь, что нет сбоя в процессе удаления
Частые ошибки и как их исправить
- Удаление активных пользователей: проверьте, что проверка заказов и last_login работает корректно, иначе потеряете клиентов
- CRON не запускается: проверьте, что wp-cron.php вызывается, и что событие зарегистрировано (используйте плагин WP Crontrol)
- Отсутствие last_login: если не отслеживается время последнего входа, функция может ошибочно удалить пользователей
Практические советы по безопасности и производительности
- Перед удалением создавайте резервные копии базы данных
- Добавьте логирование удаляемых пользователей в отдельный файл или таблицу для аудита
- Если база большая, разбивайте удаление на небольшие партии, чтобы избежать таймаутов
- Используйте проверку прав для запуска функции (например, только администратор)
Сравнение способов удаления неактивных пользователей
| Метод | Плагин | Код | Компромисс |
|---|---|---|---|
| Плагин удаления пользователей | Да (например, WP Bulk Delete) | Нет | Простота настройки, но нагрузка и ограниченные условия |
| Ручное удаление | Нет | Да | Точно, но требует времени и риска ошибки |
| Автоматизация через CRON | Можно | Да (наш пример) | Гибкость и автоматизация, но требует тестирования и контроля |