Диагностика проблемы с неактивными пользователями в WooCommerce
В интернет-магазинах на WooCommerce накапливаются пользователи, которые зарегистрировались, но давно не заходят в свой аккаунт и не совершают покупки. Это приводит к:
- Раздуванию базы данных, что может замедлить работу сайта и увеличить время резервного копирования.
- Усложнению сегментации и маркетинговых рассылок из-за «мертвых» аккаунтов.
- Потенциальным проблемам с безопасностью, если учетные записи слабо защищены.
Определить неактивных пользователей можно по дате последнего входа или последней активности. WooCommerce по умолчанию не хранит дату последнего входа, поэтому нам нужно добавить эту функциональность.
Как автоматически отслеживать и удалять неактивных пользователей
Шаг 1. Добавляем хранение даты последнего входа пользователя
В файле functions.php вашей темы или в отдельном плагине добавьте следующий код, чтобы обновлять метаполе при каждом успешном входе пользователя:
add_action('wp_login', 'update_last_login_meta', 10, 2); function update_last_login_meta($user_login, $user) { update_user_meta($user->ID, 'last_login', current_time('mysql')); }Теперь у каждого пользователя будет сохраняться дата и время последнего входа.
Шаг 2. Создаем функцию автоматического удаления неактивных пользователей
Определим период неактивности, например, 180 дней (6 месяцев), и удалим пользователей, которые не заходили в систему дольше этого срока. Запустим функцию через WP-Cron.
function delete_inactive_users() { $threshold = date('Y-m-d H:i:s', strtotime('-180 days')); $args = [ 'meta_key' => 'last_login', 'meta_value' => $threshold, 'meta_compare' => '<', 'fields' => 'ID', 'number' => 100, ]; $user_query = new WP_User_Query($args); if (!empty($user_query->results)) { foreach ($user_query->results as $user_id) { wp_delete_user($user_id); } } }Шаг 3. Настраиваем WP-Cron для регулярного вызова удаления
Добавьте в functions.php регистрируем задачу и расписание:
if (!wp_next_scheduled('delete_inactive_users_daily')) { wp_schedule_event(time(), 'daily', 'delete_inactive_users_daily'); } add_action('delete_inactive_users_daily', 'delete_inactive_users');Теперь функция delete_inactive_users будет запускаться ежедневно.
Проверка результата после внедрения
- Зайдите в базу данных (через phpMyAdmin или аналог) и проверьте пользователей с метаполем
last_login. - Запустите функцию вручную (например, через WP CLI или временно вызвав в коде), чтобы убедиться в удалении.
- Проверьте, что пользователи, не заходившие более 180 дней, удалены из раздела «Пользователи» в админке WooCommerce.
Частые ошибки и как их исправить
- Нет даты последнего входа у пользователей: Если функция записи даты входа не была добавлена заранее, все пользователи будут считаться неактивными. Решение — запускать код с момента внедрения, удалить старые аккаунты вручную.
- Удаляются администраторы или важные роли: В запросе стоит добавлять исключения по ролям, например, исключать админов. Добавьте в запрос аргумент
role__not_in = ['administrator', 'shop_manager']. - Функция не запускается по расписанию: Проверьте, активен ли WP-Cron и нет ли конфликтов с плагинами кэширования.
Дополнительные советы по безопасности и производительности
- Перед удалением пользователей делайте резервные копии базы данных.
- Добавьте логирование удалённых пользователей для аудита.
- Оптимизируйте запросы в
WP_User_Queryчерез пагинацию, чтобы не нагружать сервер при большом количестве пользователей. - Для улучшения безопасности можно отправлять уведомления пользователям, что их аккаунт будет удалён за неактивность.
Сравнение вариантов удаления неактивных пользователей
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручное удаление через админку | Простота, контроль | Трудозатратно при большом количестве |
| Автоматизация через WP-Cron и код | Автоматизация, масштабируемость | Требуется настройка, риск удаления нужных пользователей без фильтров |
| Плагины для управления пользователями | Готовые решения, удобный интерфейс | Могут замедлять сайт, не всегда гибкие |