Автоматическое удаление неактивных регистраций WooCommerce с помощью CRON

Почему важно удалять неактивные регистрации в 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МожноДа (наш пример)Гибкость и автоматизация, но требует тестирования и контроля
Как создать автоматический импорт продуктов WooCommerce из Excel
14.03.2026
WooCommerce: автоматическая обработка возвратов через хуки
23.07.2026
Как автоматизировать управление изображениями в WordPress
27.01.2026
Как удалить старые версии плагинов в WordPress и освободить место
07.02.2026
Как автоматически изменять изображения при загрузке в WordPress
04.04.2026