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

|

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

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

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

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

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

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

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

Этот хук срабатывает при успешном входе пользователя и записывает текущую дату и время в метаданные last_login.

Настройка WP-Cron для автоматического удаления неактивных пользователей

После того, как у пользователей есть метка last_login, можно настроить задачу WP-Cron, которая будет регулярно запускать функцию удаления пользователей, не заходивших больше определённого времени (например, 180 дней).

Добавляем событие 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_callback');

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

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

    $args = [
        'meta_key'     => 'last_login',
        'meta_value'   => $threshold,
        'meta_compare' => '<=',
        'fields'       => 'ID',
        'number'       => 100,
    ];

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

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

Обратите внимание, что для безопасности лучше не удалять администраторов и пользователей с определёнными ролями. Для этого добавьте проверку ролей внутри цикла.

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

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

if (in_array('administrator', $user->roles)) {
    continue;
}

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

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

МетодПлюсыМинусыКомпромиссы
WP-Cron + собственный кодГибкость, контроль, без сторонних плагиновТребует настройки, знания PHPПакетная обработка для нагрузки
Плагины (например, Inactive User Deleter)Простота, готовые решенияМогут быть избыточны, нагрузка, безопасностьМеньше контроля, зависит от обновлений
Ручное удаление через SQL-запросыБыстро, без лишних нагрузокОпасно, риск потери данныхИспользовать только с резервным копированием
Как использовать WP-Cron для автоматизации задач в WordPress
20.04.2026
Автоматическое удаление спам комментариев в WordPress: практические методы и примеры кода
04.01.2026
Как запретить регистрацию по доменам email в WordPress с подробным руководством
05.03.2026
Как создать автоматический отзыв с помощью Expert Review в WordPress
09.04.2026
Как ограничить загрузку файлов в WordPress по типу и размеру
13.08.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее