Как автоматически удалять неактивных пользователей в 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)Простота настройки, готовый интерфейсМогут быть лишние функции, нагрузкаПодходит для быстрых решений без кода
Удаление вручную через базуПолный контроль, быстроРиск ошибок, нет автоматизацииИспользовать как экстренный вариант
Как изменить автозаголовки постов в WordPress: практические решения и примеры кода
03.02.2026
Автоматическое удаление неактивных пользователей в WordPress с помощью кода
08.07.2026
Как создать автоматические уведомления в WordPress с помощью WPRemark
16.04.2026
Как создать автоматический редирект в WordPress: практические примеры и плагины
09.11.2025
Как создать выборочное отображение постов в WordPress по таксономиям с примерами кода
20.01.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее