wplinks.ru wordpress WPLinks.ru

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

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

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

Неактивные пользователи — это аккаунты, которые не использовались длительное время, например, не заходили в личный кабинет или не оставляли активность более полугода или года. Такое «мусорное» накопление может привести к нескольким проблемам:

  • Повышенный риск безопасности: устаревшие аккаунты с слабыми паролями могут быть скомпрометированы злоумышленниками.
  • Загромождение базы данных: большое количество неактивных записей снижает производительность запросов.
  • Сложности в управлении пользователями: администратору сложнее ориентироваться в актуальных аккаунтах.

Решить проблему поможет автоматизация удаления таких пользователей с помощью кода или плагинов.

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

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

Добавление отслеживания последнего входа пользователя

Добавим в functions.php вашей темы следующий код:

function wplinks_update_last_login( $login, $user ) {
    update_user_meta( $user->ID, 'wplinks_last_login', current_time('timestamp') );
}
add_action('wp_login', 'wplinks_update_last_login', 10, 2);

Этот хук wp_login срабатывает при успешной авторизации и обновляет мета-ключ wplinks_last_login с текущим временем в формате timestamp.

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

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

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

function wplinks_delete_inactive_users() {
    $days_inactive = 180; // Время неактивности в днях
    $threshold = strtotime("-{$days_inactive} days");

    $args = array(
        'meta_key'     => 'wplinks_last_login',
        'meta_value'   => $threshold,
        'meta_compare' => '<',
        'fields'       => 'ID',
        'number'       => 100,
        'orderby'      => 'meta_value',
        'order'        => 'ASC',
    );

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

    if ( ! empty( $users_to_delete ) ) {
        foreach ( $users_to_delete as $user_id ) {
            wp_delete_user( $user_id );
        }
    }
}

В этом коде мы ищем пользователей с мета-полем wplinks_last_login, значение которого меньше, чем порог времени, и удаляем их функцией wp_delete_user().

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

Как запустить автоматическое удаление по расписанию

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

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

add_action( 'wplinks_weekly_cleanup', 'wplinks_delete_inactive_users' );

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

Если нужно изменить период запуска, можно использовать фильтр для wp-cron или настроить реальный системный cron для надежности.

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

Если вы предпочитаете готовые решения, рассмотрите следующие плагины:

  • Inactive User Deleter — автоматически удаляет пользователей по времени последней активности. Нужно только настроить период и роли пользователей для удаления.
  • WP Last Login — позволяет отслеживать время последнего входа и выводить отчеты. Можно использовать вместе с кастомным кодом удаления.

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

Рекомендации по безопасности и резервному копированию

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

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

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 );
}

Заключение

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

Если хотите более удобный интерфейс и дополнительные функции, рассмотрите плагин Inactive User Deleter от WPSHOP, который интегрируется с вашим сайтом без сложных настроек.

×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше