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

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

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

Неактивные пользователи — это аккаунты, которые не заходили на сайт длительное время (например, несколько месяцев или лет). Они могут создавать несколько проблем:

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

Автоматизация удаления помогает поддерживать сайт в порядке без ручного контроля.

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

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

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

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

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

Пример функции, которая сохраняет дату последнего входа в мета-поле пользователя:

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

Эта функция добавляет или обновляет мета-ключ wpinfo_last_login с текущей датой при входе пользователя. Благодаря этому можно проверять, когда пользователь последний раз заходил.

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

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

function wpinfo_delete_inactive_users() {
    $args = array(
        'meta_key' > 'wpinfo_last_login',
        'meta_value' > date('Y-m-d H:i:s', strtotime('-180 days')),
        'meta_compare' > '<',
        'fields' > 'ID',
        'number' > 1000,
    );
    $user_query = new WP_User_Query( $args );
    $users = $user_query->get_results();

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

// Запускаем функцию по крону, например, раз в неделю
if ( ! wp_next_scheduled( 'wpinfo_weekly_delete_inactive_users' ) ) {
    wp_schedule_event( time(), 'weekly', 'wpinfo_weekly_delete_inactive_users' );
}
add_action( 'wpinfo_weekly_delete_inactive_users', 'wpinfo_delete_inactive_users' );

Этот код ищет пользователей с датой последнего входа более 180 дней назад и удаляет их. Запуск происходит еженедельно с помощью WP Cron.

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

  • Не удаляйте администраторов и других ключевых пользователей. Можно добавить фильтр по ролям.
  • Резервное копирование базы перед массовым удалением обязательно.
  • Сообщайте пользователям о возможном удалении, например, через email-рассылку.

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

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

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

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

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

Чтобы не удалять администраторов и редакторов, измените функцию следующим образом:

function wpinfo_delete_inactive_users() {
    $args = array(
        'meta_key' => 'wpinfo_last_login',
        'meta_value' => date('Y-m-d H:i:s', strtotime('-180 days')),
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 1000,
        'role__not_in' => array('administrator', 'editor'),
    );
    $user_query = new WP_User_Query( $args );
    $users = $user_query->get_results();

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

Параметр role__not_in исключает указанные роли из выборки. Это важный шаг для сохранения важных аккаунтов.

Советы по тестированию и безопасности

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

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

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

function wpinfo_delete_inactive_users() {
    $args = array(
        'meta_key' => 'wpinfo_last_login',
        'meta_value' => date('Y-m-d H:i:s', strtotime('-180 days')),
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 1000,
        'role__not_in' => array('administrator', 'editor'),
    );
    $user_query = new WP_User_Query( $args );
    $users = $user_query->get_results();

    if ( !empty($users) ) {
        foreach ( $users as $user_id ) {
            $user = get_userdata( $user_id );
            error_log( 'Удалён неактивный пользователь: ' . $user->user_login . ' (ID ' . $user_id . ')' );
            wp_delete_user( $user_id );
        }
    }
}

Логи появятся в файле debug.log при включённом WP_DEBUG_LOG.

Как использовать REST API в WordPress для создания плагинов
24.11.2025
Как создать динамические таблицы в WordPress с помощью шорткодов
26.12.2025
Как создать собственный виджет для WordPress
14.11.2025
Создание адаптивного блока с картинкой в WordPress
10.11.2025
Как добавить динамические поля в WordPress: практическое руководство
09.03.2026