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

|

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

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

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

Для удаления нужна четкая метрика активности. В WordPress не всегда есть точные данные о последнем входе пользователя. Чаще всего используют два варианта:

Для проверки, есть ли у вас данные о последнем входе, выполните SQL-запрос в базе данных через phpMyAdmin или WP-CLI:

SELECT user_login, meta_value FROM wp_usermeta WHERE meta_key = 'last_login' ORDER BY meta_value DESC LIMIT 10;

Если данных нет, можно добавить код для фиксации даты логина (пример ниже).

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

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

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

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

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

Этот код будет удалять пользователей, которые не заходили на сайт более 180 дней (6 месяцев):

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

    $user_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT user_id FROM $wpdb->usermeta 
         WHERE meta_key = 'last_login' 
         AND meta_value < %s",
         $threshold
    ));

    if (empty($user_ids)) {
        return;
    }

    foreach ($user_ids as $user_id) {
        wp_delete_user($user_id);
    }
}

3. Настраиваем автоматический запуск удаления через WP-Cron

Добавьте в functions.php код для планирования задачи удаления раз в сутки:

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

add_action('daily_inactive_user_cleanup', 'delete_inactive_users');

Как проверить, что удаление работает

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

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

foreach ($user_ids as $user_id) {
    $user = get_userdata($user_id);
    if (in_array('administrator', $user->roles)) {
        continue;
    }
    wp_delete_user($user_id);
}

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

МетодПлюсыМинусыПример
Плагин (например, WP Bulk Delete)Простота настройки, интерфейсДополнительная нагрузка, зависимостиClearfy Pro (частично решает)
Код с WP-CronГибкость, нет лишних плагиновНужны базовые навыки, настройка CronКод из статьи
Внешний скрипт и системный CronСтабильность, не зависит от трафикаДополнительные настройки сервераWget или curl вызов wp-cron.php
Как автоматически удалять товар в WooCommerce после отрицательной оценки
22.04.2026
Как использовать хуки и фильтры в WordPress для изменения выводимых данных
11.12.2025
Как удалить или заблокировать загруженные файлы в WordPress через .htaccess
19.04.2026
Как создать собственный виджет в WordPress: практические примеры и советы
23.11.2025
Как создать автоматический каталог карт в WordPress с использованием Yelly
12.04.2026
×
Обнови свой WordPress!

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

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