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

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

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

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

  • Оптимизация базы данных и ускорение запросов к ней.
  • Повышение безопасности, так как неиспользуемые аккаунты могут быть взломаны.
  • Улучшение управления пользователями и упрощение администрирования.

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

Как хранить дату последнего входа пользователя в WordPress

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

Добавим функцию wpdeveloper_save_last_login, которая будет запускаться при успешной авторизации и записывать текущую дату:

function wpdeveloper_save_last_login( $user_login, $user ) {
    update_user_meta( $user->ID, 'wpdeveloper_last_login', current_time( 'mysql' ) );
}
add_action( 'wp_login', 'wpdeveloper_save_last_login', 10, 2 );

Теперь при каждом входе пользователя в базу данных будет записываться дата в метаполе wpdeveloper_last_login.

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

Чтобы удалить пользователей, которые не заходили, например, более 180 дней, нужно выполнить выборку по метаполю wpdeveloper_last_login и сравнить с датой 180 дней назад.

Пример функции wpdeveloper_delete_inactive_users для удаления таких пользователей:

function wpdeveloper_delete_inactive_users( $days = 180 ) {
    $date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );

    $args = [
        'meta_key' => 'wpdeveloper_last_login',
        'meta_value' => $date_threshold,
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 100,
    ];

    $user_query = new WP_User_Query( $args );
    $users_to_delete = $user_query->get_results();

    if ( empty( $users_to_delete ) ) {
        return 0;
    }

    $deleted_count = 0;
    foreach ( $users_to_delete as $user_id ) {
        require_once ABSPATH . 'wp-admin/includes/user.php';
        if ( wp_delete_user( $user_id ) ) {
            $deleted_count++;
        }
    }
    return $deleted_count;
}

Эту функцию можно запускать вручную или с помощью WP-Cron для регулярной очистки.

Регулярное удаление через WP-Cron

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

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

function wpdeveloper_do_user_cleanup() {
    $deleted = wpdeveloper_delete_inactive_users( 180 );
    if ( $deleted > 0 ) {
        error_log( "[WPDeveloper] Deleted {$deleted} inactive users" );
    }
}
add_action( 'wpdeveloper_weekly_user_cleanup', 'wpdeveloper_do_user_cleanup' );

Теперь раз в неделю будут удаляться все пользователи с последним входом более 180 дней назад.

Дополнительные меры предосторожности при удалении пользователей

Удаление пользователей — критичная операция, поэтому следует учитывать несколько моментов:

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

Пример проверки роли администратора перед удалением:

foreach ( $users_to_delete as $user_id ) {
    $user = get_userdata( $user_id );
    if ( in_array( 'administrator', (array) $user->roles ) ) {
        continue; // пропускаем админов
    }
    wp_delete_user( $user_id );
}

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

Если не хочется писать код, можно использовать готовые плагины с похожей функциональностью:

  • Inactive User Deleter — позволяет настроить удаление по времени без входа.
  • WP Bulk Delete — универсальный инструмент для массового удаления по разным условиям, в том числе по дате последнего входа.
  • Clearfy Pro с настройками безопасности и очистки базы — можно интегрировать с вашим процессом.

При использовании плагинов обычно достаточно настроить период неактивности и запустить автоматическую очистку.

Выводы и рекомендации

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

Рекомендуется внедрять такую систему с учетом ролей пользователей и уведомлений, чтобы не потерять нужных людей. Для автоматизации удобно использовать WP-Cron и писать собственные функции, как показано выше, либо использовать проверенные плагины.

Для удобства управления пользователями и автоматизации можете рассмотреть плагин Clearfy Pro, который расширяет возможности безопасности и оптимизации WordPress.

Как отключить AJAX в WooCommerce для ускорения загрузки страниц
16.05.2026
Как создать автоматические ответы в комментариях WordPress
30.12.2025
Как создать собственный виджет WordPress с использованием классов
13.11.2025
Как создать адаптивные блоки в WordPress Gutenberg
02.12.2025
Как использовать REST API в WordPress для создания настраиваемых запросов
17.11.2025