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

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

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

Как определить неактивного пользователя

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

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

Ниже пример кода, который записывает в мета-поле дату последнего входа и запускает крон-задачу для удаления пользователей без входа более 180 дней.

<?php

// Шаг 1. Записываем дату последнего входа
add_action('wp_login', function($user_login, $user) {
    update_user_meta($user->ID, 'last_login', current_time('timestamp'));
}, 10, 2);

// Шаг 2. Создаем крон-задачу для очистки
add_action('delete_inactive_users_daily', function() {
    $threshold = strtotime('-180 days');
    $args = [
        'meta_key' => 'last_login',
        'meta_value' => $threshold,
        'meta_compare' => '<',
        'number' => -1,
        'fields' => 'ID'
    ];
    $users = get_users($args);
    foreach ($users as $user_id) {
        wp_delete_user($user_id);
    }
});

// Шаг 3. Регистрируем событие крон
if (!wp_next_scheduled('delete_inactive_users_daily')) {
    wp_schedule_event(time(), 'daily', 'delete_inactive_users_daily');
}

// Шаг 4. Очистка при деактивации плагина или темы
register_deactivation_hook(__FILE__, function() {
    wp_clear_scheduled_hook('delete_inactive_users_daily');
});

?>

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

1. Войдите под тестовым пользователем, затем проверьте в базе данных в таблице wp_usermeta, что у него установлен мета-ключ last_login с текущим timestamp.

2. Запустите вручную крон-задачу с помощью WP-CLI или плагина для управления задачами WP-Cron. Например, через WP-CLI:

wp cron event run delete_inactive_users_daily

3. Проверьте списки пользователей — аккаунты с last_login старше 180 дней должны быть удалены.

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

  • Нет записи даты последнего входа — крон удалит только тех, у кого установлен last_login. Убедитесь, что хук wp_login работает и мета создается.
  • Некорректный формат даты — используйте current_time('timestamp'), не time(), чтобы учитывать часовой пояс WordPress.
  • Крон-задача не запускается — проверьте, есть ли событие в списке с помощью wp cron event list, и что сайт посещают, чтобы WP-Cron срабатывал.
  • Удаляются администраторы — в коде выше удаляются все пользователи с устаревшим логином, добавьте проверку ролей, если нужно сохранить некоторые:
if (!in_array('administrator', $user_roles)) {
    wp_delete_user($user_id);
}

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

  • Не удаляйте пользователей без резервного копирования базы.
  • Добавьте фильтр по ролям, чтобы исключить важных пользователей.
  • Для больших сайтов лучше разбивать удаление на порции, чтобы не перегружать сервер.
  • Используйте WP-CLI для запуска задач вне зависимости от посещаемости сайта.

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

МетодПлюсыМинусы
Код с wp_login и WP-CronПолный контроль, без плагинов, гибкостьНужно писать и тестировать код, зависит от WP-Cron
Плагины очистки пользователей (например, WP User Manager)Простота настройки, интерфейсДополнительная нагрузка, возможные конфликты
Ручное удаление в админкеПростотаНе подходит для больших сайтов, трудоемко
Как создать автоматический импорт данных из Google Sheets в WordPress
09.02.2026
Как добавить поддержку виджетов Gutenberg в собственную тему WordPress
08.01.2026
Как создать фильтры для товаров в WooCommerce без плагинов
19.01.2026
Как удалить или скрыть свойства товара WooCommerce в админке WordPress
29.04.2026
Как создать настройку для отключения кэша в WordPress
31.12.2025