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

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

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

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

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

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

function record_last_login($login, $user) {
    update_user_meta($user->ID, 'last_login', current_time('mysql'));
}
add_action('wp_login', 'record_last_login', 10, 2);

После недели работы этого кода можно собрать список неактивных пользователей, например, тех, кто не входил более 180 дней:

$args = [
    'meta_key' => 'last_login',
    'meta_value' => date('Y-m-d H:i:s', strtotime('-180 days')),
    'meta_compare' => '<=',
    'fields' => 'ID',
];
$inactive_users = get_users($args);

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

Ниже пример функции, которая удаляет пользователей, не заходивших более 180 дней и не имеющих ролей администратора или редактора:

function delete_inactive_users($days = 180) {
    $threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
    $args = [
        'meta_key' => 'last_login',
        'meta_value' => $threshold,
        'meta_compare' => '<=',
        'fields' => ['ID', 'roles'],
    ];
    $users = get_users($args);

    foreach ($users as $user) {
        if (in_array('administrator', $user->roles) || in_array('editor', $user->roles)) {
            continue; // не удаляем важных пользователей
        }
        wp_delete_user($user->ID);
    }
}
// Запуск удаления
// delete_inactive_users();

Рекомендуется запускать эту функцию через WP-Cron с интервалом, например, раз в месяц.

Как проверить, что удаление сработало

  • Перед запуском сделайте экспорт пользователей (через phpMyAdmin или плагины типа Export Users to CSV).
  • После запуска функции проверьте, что пользователи с датой последнего входа раньше порога действительно удалены.
  • В админке WordPress зайдите в раздел «Пользователи» и убедитесь, что количество пользователей уменьшилось.
  • Проверьте логи сайта, если есть, на предмет ошибок в процессе удаления.

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

  • Отсутствует мета last_login: если код записи даты последнего входа не был установлен заранее, функция ничего не удалит. Решение — добавить код записи и подождать накопления данных.
  • Удаляются администраторы или редакторы: проверьте условие проверки ролей, чтобы не затронуть критичных пользователей.
  • Ошибка wp_delete_user из-за связей: если пользователь связан с контентом, wp_delete_user требует передачу ID другого автора для переназначения. Можно использовать wp_delete_user($user_id, $reassign_id), где $reassign_id — пользователь-администратор.
  • Функция вызывается слишком часто: чтобы избежать нагрузки, запускайте удаление раз в месяц через wp_schedule_event.

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

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

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

МетодПлюсыМинусыКомпромисс
Плагин (например, Inactive User Deleter)Быстро, готовое решениеМогут быть избыточные функции, нагрузкаИспользовать только проверенные плагины с хорошими отзывами
Кастомный код с last_loginТочный контроль, можно адаптироватьНужно время на накопление данных, требует поддержкиЗапускать через WP-Cron, логировать
Удаление по дате регистрацииПросто реализоватьНе учитывает активность, можно удалить нужных пользователейИспользовать только для новых сайтов или с доп. проверками
Оптимизация базы данных WordPress: удаление связанных и устаревших данных
02.12.2025
Как избежать проблем с перенаправлением после смены домена в WordPress
24.04.2026
Как создать настройки плагинов WordPress: подробное руководство
13.11.2025
Как создать собственный тип записи в WordPress с примером кода
09.01.2026
Как создать многоуровневую навигацию в WordPress с примерами
04.04.2026