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

|

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

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

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

Под «неактивными» чаще всего понимают пользователей, которые не заходили на сайт определённое время (например, 6 месяцев или год). В WordPress дата последнего входа не сохраняется по умолчанию, поэтому нужно добавить отслеживание этой информации.

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

В functions.php темы добавьте следующий код, который при каждом входе обновляет мета-поле last_login:

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

Этот код записывает дату и время последнего входа пользователя в формате MySQL в пользовательские метаданные.

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

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

function delete_inactive_users() {
    $days_inactive = 180;
    $date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days_inactive} days" ) );

    $args = array(
        'meta_key'     => 'last_login',
        'meta_value'   => $date_threshold,
        'meta_compare' => '<',
        'fields'       => 'ID',
        'exclude'      => array(1), // исключаем пользователя с ID 1 (обычно админ)
        'role__not_in' => array('administrator'), // исключаем админов
        'number'       => 100 // лимит за раз
    );

    $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 ) {
            require_once( ABSPATH . 'wp-admin/includes/user.php' );
            wp_delete_user( $user_id );
        }
    }
}

// Запускаем функцию раз в сутки через WP-Cron
if ( ! wp_next_scheduled( 'delete_inactive_users_daily' ) ) {
    wp_schedule_event( time(), 'daily', 'delete_inactive_users_daily' );
}
add_action( 'delete_inactive_users_daily', 'delete_inactive_users' );

Этот код запускает задачу в WP-Cron, которая ежедневно удаляет пользователей, не заходивших 180+ дней. Можно изменить период в переменной $days_inactive.

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

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

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

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

МетодПлюсыМинусыРекомендации
Код на functions.php + WP-CronПолный контроль, бесплатно, гибкоТребует навыков, возможны ошибкиЛучше для разработчиков и кастомных задач
Плагины (например, Inactive User Deleter)Простота настройки, готовый интерфейсМогут быть лишние функции, нагрузкаПодходит для быстрых решений без кода
Удаление вручную через базуПолный контроль, быстроРиск ошибок, нет автоматизацииИспользовать как экстренный вариант
Как убрать из индекса только тег page в WordPress
26.08.2026
Как закрыть дубли страниц в WordPress от индексации
23.08.2026
×

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

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

пишет статьи

готовит SEO

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

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