Как автоматизировать удаление неактивных пользователей в WordPress

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

На крупных сайтах и проектах на WordPress с множеством зарегистрированных пользователей быстро накапливаются учетные записи, которые давно не использовались. Это не только занимает место в базе данных, но и создает угрозу безопасности — например, такие аккаунты могут быть целями для взлома. Кроме того, неактивные пользователи создают шум в аналитике и усложняют управление ролями и разрешениями.

Чтобы понять, есть ли на вашем сайте проблема, можно выполнить запрос к базе данных и проверить, сколько пользователей не заходили на сайт более полугода:

SELECT user_login, user_email, user_registered, last_login_meta.meta_value AS last_login FROM wp_users LEFT JOIN wp_usermeta AS last_login_meta ON wp_users.ID = last_login_meta.user_id AND last_login_meta.meta_key = 'last_login' WHERE last_login_meta.meta_value < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 6 MONTH)) OR last_login_meta.meta_value IS NULL;

Если таких пользователей много, пора подумать об автоматизации их удаления.

Как отслеживать последний вход пользователя в WordPress

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

add_action('wp_login', function($user_login, $user) { update_user_meta($user->ID, 'last_login', time()); }, 10, 2);

Данный код нужно добавить в файл functions.php вашей темы или в отдельный плагин.

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

1. Создаем функцию удаления

function delete_inactive_users($days = 180) { $threshold = time() - ($days * 24 * 60 * 60); $args = [ 'meta_key' => 'last_login', 'meta_value' => $threshold, 'meta_compare' => '<', 'fields' => 'ID' ]; $users = get_users($args); foreach ($users as $user_id) { wp_delete_user($user_id); } }

2. Запускаем функцию по расписанию

Создадим cron-задачу, которая будет запускать удаление раз в неделю:

if (!wp_next_scheduled('weekly_delete_inactive_users')) { wp_schedule_event(time(), 'weekly', 'weekly_delete_inactive_users'); } add_action('weekly_delete_inactive_users', function() { delete_inactive_users(180); });

3. Вручную тестируем функцию

Для проверки работы функции вызовите delete_inactive_users(180); напрямую в консоли WP-CLI или временно добавьте вызов в functions.php и проверьте, удаляются ли пользователи с датой последнего входа более 180 дней назад.

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

  • Запустите SQL-запрос из раздела диагностики и убедитесь, что пользователей с last_login старше 180 дней стало меньше.
  • Проверьте логи cron, если они настроены, или добавьте логирование в функцию удаления:
function delete_inactive_users($days = 180) { $threshold = time() - ($days * 24 * 60 * 60); $args = [ 'meta_key' => 'last_login', 'meta_value' => $threshold, 'meta_compare' => '<', 'fields' => 'ID' ]; $users = get_users($args); foreach ($users as $user_id) { wp_delete_user($user_id); error_log("Deleted user ID: $user_id due to inactivity"); } }

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

  • Ошибка: Не удаляются пользователи.
    Причина: Мета-поле last_login не установлено или крон-задача не настроена.
    Решение: Проверьте, работает ли код обновления last_login при входе, и активирован ли WP Cron.
  • Ошибка: Удаляются нужные пользователи (например, администраторы).
    Причина: Не исключены роли из удаления.
    Решение: Добавьте в запрос исключение для ролей, например, так:
$args['role__not_in'] = ['administrator', 'editor'];
  • Ошибка: Сайт тормозит из-за большого количества пользователей.
    Причина: Запросы к базе данных не оптимизированы.
    Решение: Удаляйте пользователей партиями, например по 50 записей за раз, чтобы снизить нагрузку.

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

  • Не удаляйте пользователей без резервной копии базы данных.
  • Перед удалением можно отправить уведомление пользователям с предупреждением о предстоящем удалении.
  • Исключайте из удаления пользователей с важными ролями (администраторы, редакторы).
  • Для больших сайтов лучше использовать WP-CLI скрипты для пакетного удаления, что уменьшит нагрузку на веб-сервер.
  • Добавьте логирование удалений для аудита и отката в случае ошибок.

Сравнение способов автоматического удаления пользователей WordPress

МетодПлюсыМинусыПример использования
Через WP Cron и usermetaАвтоматизация, гибкость, нет сторонних плагиновТребует добавления кода, зависит от WP CronКод из статьи
Плагины (например, Inactive User Deleter)Простота установки, готовый функционалМогут быть избыточными, нагрузка, несовместимостиУстановка и настройка через админку
WP-CLI скриптыЭффективно для больших баз, быстроТребует доступа к серверу и знаний CLIwp user delete $(wp user list --meta_key=last_login --meta_value=timestamp --meta_compare='<' --field=ID)
Как удалить дубликаты записей в WordPress
23.02.2026
Как удалить закрепленные сообщения в WordPress
28.01.2026
Как создать собственный виджет в WordPress с поддержкой настроек
13.11.2025
Как автоматически удалять старые черновики в WordPress
10.03.2026
Как автоматизировать создание копий записей WordPress с помощью AJAX
23.02.2026