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

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

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

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

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

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

Особенно важно, если вы используете плагин для членства или магазин на WordPress.

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

Для удаления нужно определить, кто считается неактивным. Обычно это пользователи, которые не заходили на сайт определённое время — например, 6 или 12 месяцев. В WordPress дата последнего входа хранится в метаданных пользователя с ключом last_login или в плагинах авторизации.

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

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

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

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

Этот хук сработает при каждом входе и запишет дату и время входа в формате MySQL.

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

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

function wplog_delete_inactive_users() {
    $threshold = date('Y-m-d H:i:s', strtotime('-365 days')); // 1 год

    $args = [
        'meta_key' => 'wplog_last_login',
        'meta_value' => $threshold,
        '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);
        }
    }
}

// Для запуска по крону можно добавить хук
add_action('wplog_cron_delete_inactive_users', 'wplog_delete_inactive_users');

Этот код ищет пользователей, у которых дата последнего входа старше 365 дней, и удаляет их.

Настройка автоматического запуска через WP-Cron

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

if (!wp_next_scheduled('wplog_cron_delete_inactive_users')) {
    wp_schedule_event(time(), 'daily', 'wplog_cron_delete_inactive_users');
}

Этот код поставит задачу на ежедневный запуск. Вы можете менять интервал на 'weekly' или 'monthly', если нужно.

Как обезопасить процесс удаления

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

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

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

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

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

  • Inactive User Deleter — плагин с настраиваемыми параметрами удаления.
  • Auto Delete Users — позволяет удалять пользователей по критериям активности.

Для интеграции с системой отчетов можно использовать WPExpert Review для генерации отчётов об удалённых пользователях.

Расширенные варианты: деактивация вместо удаления

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

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

function wplog_deactivate_inactive_users() {
    $threshold = date('Y-m-d H:i:s', strtotime('-365 days'));

    $args = [
        'meta_key' => 'wplog_last_login',
        'meta_value' => $threshold,
        'meta_compare' => '<',
        'fields' => 'ID',
    ];
    $user_query = new WP_User_Query($args);
    $users = $user_query->get_results();

    foreach ($users as $user_id) {
        update_user_meta($user_id, 'wplog_is_active', 0);
    }
}

Затем можно проверять этот параметр при авторизации и блокировать вход.

Итоги и рекомендации

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

Обязательно тестируйте скрипты на тестовом сайте и делайте резервные копии перед удалением пользователей.

Как удалить категорию в WordPress с помощью кода
17.12.2025
Как избежать проблем при использовании AJAX в WordPress
10.04.2026
Как оптимизировать загрузку WordPress без плагинов
24.11.2025
Автоматическое создание отзывов в WordPress с помощью WPExpert Review
16.03.2026
Как добавить обязывающее сообщение об ошибке 404 в WooCommerce
10.05.2026