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

|

Диагностика проблемы неактивных пользователей в WordPress

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

Чтобы понять, насколько велика доля неактивных пользователей, можно выполнить SQL-запрос к базе, например:

SELECT ID, user_login, user_registered, last_login.meta_value AS last_login_date
FROM wp_users
LEFT JOIN wp_usermeta AS last_login ON (wp_users.ID = last_login.user_id AND last_login.meta_key = 'last_login')
WHERE last_login.meta_value < DATE_SUB(NOW(), INTERVAL 6 MONTH)
OR last_login.meta_value IS NULL;

Если в вашей базе нет мета-данных с последним входом, придется реализовать их хранение самостоятельно, например, с помощью хука wp_login для записи времени последнего входа.

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

1. Отслеживание времени последнего входа пользователя

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

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

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

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

function delete_inactive_users($days = 180) {
    global $wpdb;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));

    // Получаем ID пользователей с last_login до пороговой даты или без last_login
    $users_to_delete = $wpdb->get_col($wpdb->prepare(
        "SELECT u.ID FROM {$wpdb->users} u
        LEFT JOIN {$wpdb->usermeta} um ON u.ID = um.user_id AND um.meta_key = 'last_login'
        WHERE um.meta_value < %s OR um.meta_value IS NULL",
        $date_threshold
    ));

    if (!empty($users_to_delete)) {
        foreach ($users_to_delete as $user_id) {
            // Не удаляем администраторов
            if (user_can($user_id, 'administrator')) {
                continue;
            }
            require_once(ABSPATH . 'wp-admin/includes/user.php');
            wp_delete_user($user_id);
        }
    }
}

3. Автоматизация через WP-Cron

Чтобы не запускать функцию вручную, зарегистрируем ежедневное событие WP-Cron:

function schedule_inactive_users_cleanup() {
    if (!wp_next_scheduled('daily_inactive_users_cleanup')) {
        wp_schedule_event(time(), 'daily', 'daily_inactive_users_cleanup');
    }
}
add_action('wp', 'schedule_inactive_users_cleanup');

add_action('daily_inactive_users_cleanup', function() {
    delete_inactive_users(180); // Удаляем пользователей неактивных более 180 дней
});

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

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

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

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

МетодПреимуществаНедостатки
Код с WP-CronГибкость, контроль над логикой, отсутствие дополнительных плагиновТребует навыков программирования, настройка WP-Cron
Плагины (например, Inactive User Delete)Простота установки, готовый интерфейсМожет грузить сайт, ограниченная кастомизация
Ручное удаление через SQL/админкуПолный контроль, без автоматизацииТрудоёмко, риск ошибок, не подходит для больших баз
Как полностью удалить остаточные файлы и записи после удаления продуктов в WooCommerce
19.06.2026
Как убрать версию WordPress из header для безопасности сайта
05.11.2025
Как использовать хуки в WordPress для автоматизации задач
26.11.2025
Как отключить автостарт WP-Cron для оптимизации сайта WordPress
22.02.2026
Как создать динамическую таблицу в WordPress с помощью AJAX
18.02.2026
×
Обнови свой WordPress!

Держи скидку 15% на премиум тему Reboot

Купить со скидкой ⋙