wpmoney.ru wordpress WP Money

Как автоматически удалять неактивных пользователей WooCommerce по дате последнего входа

Диагностика проблемы: зачем удалять неактивных пользователей WooCommerce

В интернет-магазинах на WooCommerce база клиентов со временем растёт, но часть пользователей перестаёт заходить на сайт и становится неактивной. Такие аккаунты создают дополнительную нагрузку на базу данных, замедляют работу сайта и усложняют аналитику. Регулярное удаление неактивных пользователей по дате последнего входа помогает поддерживать базу в актуальном состоянии и улучшать производительность.

Как проверить, есть ли неактивные пользователи и как определить их количество

Для начала нужно узнать, сколько пользователей не заходило на сайт длительное время. В WooCommerce и WordPress дату последнего входа можно хранить в метаполях пользователей, если вы заранее реализовали такую функциональность, либо добавить её сейчас.

Если вы не отслеживали дату последнего входа, можно временно подключить плагин WP Last Login — он сохраняет время последнего входа в метаполе last_login. После установки и активации плагина подождите несколько дней для сбора данных.

Чтобы определить количество неактивных пользователей с последним входом более 180 дней назад, выполните SQL-запрос через phpMyAdmin или аналог:

SELECT COUNT(*) FROM wp_usermeta um
JOIN wp_users u ON um.user_id = u.ID
WHERE um.meta_key = 'last_login'
AND um.meta_value < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 180 DAY));

Пошаговое решение: автоматическое удаление неактивных пользователей по дате входа

1. Добавляем функцию для удаления неактивных пользователей

Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин. Он будет искать пользователей, у которых последний вход старше заданного количества дней, и удалять их:

function wpmoney_delete_inactive_users($days = 180) {
    global $wpdb;

    $threshold = time() - ($days * 24 * 60 * 60);

    $user_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = 'last_login' AND meta_value < %d",
        $threshold
    ));

    if (empty($user_ids)) {
        return 0; // Нет пользователей для удаления
    }

    foreach ($user_ids as $user_id) {
        require_once ABSPATH . 'wp-admin/includes/user.php';
        wp_delete_user($user_id);
    }

    return count($user_ids);
}

2. Автоматизация через WP-Cron

Добавим планировщик задач, который будет запускать удаление раз в неделю:

function wpmoney_schedule_delete_inactive_users() {
    if (!wp_next_scheduled('wpmoney_weekly_delete_inactive_users')) {
        wp_schedule_event(time(), 'weekly', 'wpmoney_weekly_delete_inactive_users');
    }
}
add_action('wp', 'wpmoney_schedule_delete_inactive_users');

add_action('wpmoney_weekly_delete_inactive_users', function() {
    $deleted_count = wpmoney_delete_inactive_users(180); // 180 дней
    if ($deleted_count) {
        error_log("Удалено {$deleted_count} неактивных пользователей WooCommerce.");
    }
});

Проверка результата после внедрения

1. Проверьте лог ошибок PHP (error_log) на наличие сообщений об удалении пользователей.
2. Выполните SQL-запрос, показанный в блоке диагностики, чтобы убедиться, что количество пользователей с устаревшим last_login уменьшилось.
3. В админке WordPress в разделе «Пользователи» проверьте, что неактивные пользователи исчезли.
4. Для теста можно изменить условие на меньший период (например, 1 день), чтобы проверить, что код работает корректно, а затем вернуть 180 дней.

Частые ошибки и как их исправить

  • Отсутствует метаполе last_login — без него скрипт не сможет определить дату последнего входа. Решение: установить плагин WP Last Login или реализовать собственное сохранение даты входа через хук wp_login.
  • Удаление пользователей не происходит — проверьте права пользователя, под которым запускается скрипт, и убедитесь, что нет ошибок в логе.
    Проверьте, что функция wp_delete_user() вызывается корректно, и что нет конфликтов с другими плагинами безопасности.
  • Удаляются не те пользователи — проверьте корректность расчёта порога времени и формат хранения даты в метаполе (Unix timestamp). Можно добавить логирование IDs пользователей для отладки.

Практические советы по безопасности и производительности

  • Перед удалением пользователей обязательно создавайте резервные копии базы данных.
  • Удаление пользователей массово может нагружать сервер — запускайте задачу во время низкой нагрузки.
  • Если у вас много пользователей, подумайте об удалении пакетами по 50-100 за один запуск, чтобы избежать таймаутов:
    foreach (array_chunk($user_ids, 50) as $batch) {
        foreach ($batch as $user_id) {
            wp_delete_user($user_id);
        }
        sleep(1); // пауза для снижения нагрузки
    }
  • Для отслеживания активности пользователей можно дополнительно логировать действия в магазине — это поможет точнее выявлять неактивных клиентов.

Сравнение подходов удаления неактивных пользователей

МетодПлюсыМинусыПрименимость
Плагин WP Last Login + WP-Cron скрипт удаленияПростота установки, готовое хранение даты входаЗависимость от плагина, возможна нагрузка при большом количестве пользователейДля магазинов со средней базой пользователей
Собственная реализация логики last_login и удаленияПолный контроль, можно оптимизировать под задачиТребуется больше времени на разработку и тестированиеДля крупных проектов с нестандартными требованиями
Удаление вручную через SQLМоментальное удалениеРиск ошибок, потеря связанной информацииЭкстренные случаи, администраторы с опытом
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙