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

|

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

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

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

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

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

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

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

Эта функция обновляет метаполе last_login при каждом входе пользователя.

Выбор периода неактивности

Определите, сколько дней без активности считается неактивным. Например, 180 дней (6 месяцев) — распространённый порог.

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

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

if (defined('WP_CLI') && WP_CLI) {
    WP_CLI::add_command('delete_inactive_users', function($args, $assoc_args) {
        $days = isset($assoc_args['days']) ? intval($assoc_args['days']) : 180;
        $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

        $args = [
            'meta_key' => 'last_login',
            'meta_value' => $date_threshold,
            'meta_compare' => '<',
            'fields' => 'ID',
            'number' => -1
        ];

        $user_query = new WP_User_Query($args);
        $user_ids = $user_query->get_results();

        if (empty($user_ids)) {
            WP_CLI::success('Нет неактивных пользователей для удаления.');
            return;
        }

        foreach ($user_ids as $user_id) {
            require_once ABSPATH . 'wp-admin/includes/user.php';
            wp_delete_user($user_id);
            WP_CLI::log("Удалён пользователь ID: $user_id");
        }
        WP_CLI::success('Удаление неактивных пользователей завершено.');
    });
}

Запуск команды в консоли:

wp delete_inactive_users --days=180

Если у вас нет доступа к WP CLI, можно создать аналогичный код с запуском через CRON.

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

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

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

$args['role__not_in'] = ['administrator', 'editor'];

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

МетодПлюсыМинусыКомпромисс
WP CLI командаТочный контроль, быстрое выполнение, логированиеТребуется доступ к консоли сервераИспользовать только на VPS или выделенных хостингах
CRON задача с PHPАвтоматизация без доступа к консолиМожет нагружать сайт, ограничение времени выполненияРазбивать удаление на части, использовать wp_schedule_event
Плагин автоочисткиПростота установки, интерфейсМеньше гибкости, возможны конфликтыИспользовать проверенные плагины, например WP ClearInactiveUsers
Как удалить старые ревизии записей в WordPress для оптимизации базы данных
16.02.2026
Автоматическое создание категорий и подкатегорий в WordPress с помощью кода
06.01.2026
Как использовать REST API WooCommerce для автоматизации обработки заказов
30.04.2026
Как использовать WP-Cron для автоматического удаления старых отзывов WooCommerce
27.05.2026
Как создать автоматический импорт продуктов в WooCommerce из CSV файла
09.04.2026
×
WPShop
партнерка без «но»!

До 3225₽ за каждую продажу

Подключиться к игре