Удаление неактивных пользователей WordPress по дате регистрации и последнему логину

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

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

Со временем база пользователей растет, но не все из них остаются активными. Вот основные причины для удаления таких аккаунтов:

  • Оптимизация производительности базы данных;
  • Уменьшение потенциальных точек взлома;
  • Упрощение администрирования и отчетности;
  • Снижение затрат на обслуживание сайта.

Удаление старых или неактивных пользователей – важная часть поддержки безопасности и стабильности сайта.

Как определить неактивных пользователей: параметры для фильтрации

Для удаления нужно однозначно определить критерии, по которым пользователь считается неактивным. Обычно используют:

  • Дата регистрации – например, удалить пользователей, зарегистрированных более года назад;
  • Дата последнего входа – например, удалить пользователей, которые не заходили 6 месяцев и дольше;
  • Статус пользователя – удалять только подписчиков, а администраторов и редакторов не трогать.

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

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

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

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

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

Удаление неактивных пользователей по дате последнего входа и регистрации

Теперь напишем функцию, которая найдет и удалит пользователей, которые не заходили определенное время или зарегистрировались давно:

function wpdeveloper_delete_inactive_users($days_inactive = 180, $days_registered = 365) {
    global $wpdb;

    $date_inactive = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));
    $date_registered = date('Y-m-d H:i:s', strtotime('-' . $days_registered . ' days'));

    // Получаем ID пользователей, у которых last_login старше $date_inactive или отсутствует, и дата регистрации старше $date_registered
    $user_ids = $wpdb->get_col($wpdb->prepare(
        "SELECT u.ID FROM {$wpdb->users} u
        LEFT JOIN {$wpdb->usermeta} um ON u.ID = um.user_id AND um.meta_key = 'wpdeveloper_last_login'
        WHERE (um.meta_value IS NULL OR um.meta_value < %s) AND u.user_registered < %s
        AND u.ID NOT IN (SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key = '{$wpdb->prefix}capabilities' AND meta_value LIKE '%administrator%')",
        $date_inactive, $date_registered
    ));

    if (!empty($user_ids)) {
        foreach ($user_ids as $user_id) {
            wp_delete_user($user_id);
        }
    }

    return count($user_ids);
}

В этой функции:

  • Мы ищем пользователей, у которых последнего логина нет или он старше 180 дней;
  • Дата регистрации старше 365 дней;
  • И при этом исключаем администраторов;
  • Удаляем найденных пользователей функцией wp_delete_user().

Автоматизация удаления с помощью WP-Cron

Чтобы не запускать удаление вручную, создадим задачу, которая будет запускаться раз в месяц:

add_action('wpdeveloper_monthly_cleanup', 'wpdeveloper_cleanup_task');

function wpdeveloper_cleanup_task() {
    $deleted = wpdeveloper_delete_inactive_users();
    error_log("WPDeveloper: удалено пользователей: " . $deleted);
}

if (!wp_next_scheduled('wpdeveloper_monthly_cleanup')) {
    wp_schedule_event(time(), 'monthly', 'wpdeveloper_monthly_cleanup');
}

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

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

Если не хочется писать код, можно использовать готовые решения:

  • Inactive User Deleter — позволяет искать и удалять неактивных пользователей по дате последнего входа;
  • WP Bulk Delete — мощный инструмент для массового удаления пользователей по разным условиям, включая дату регистрации;
  • Clearfy Pro (ссылка: https://wpshop.ru/plugins/clearfy-pro/) — содержит модуль оптимизации пользователей и очистки базы.

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

Рекомендации по безопасности и резервному копированию

Перед автоматическим удалением пользователей обязательно сделайте резервную копию базы данных. Можно использовать плагины для резервного копирования, например, Backup Plugin. Это позволит восстановить данные при ошибках.

Также рекомендуем сначала запускать функцию удаления в тестовом режиме — например, просто выводить список пользователей, чтобы убедиться, что удалятся только нужные.

Вывод

Удаление неактивных пользователей — важная задача для поддержания производительности и безопасности WordPress-сайта. Использование метаполя с датой последнего входа и регулярный запуск удаления по CRON позволит автоматизировать процесс. Если комфортнее работать через интерфейс, рассмотрите плагины с функционалом массового удаления.

Автоматическая установка и настройка плагинов WordPress через код
21.02.2026
Оптимизация загрузки изображений в WordPress: лучшие практики и плагины
25.11.2025
Автоматическое удаление временно неактивных заказов WooCommerce
06.05.2026
Как автоматизировать управление ролями и правами в WordPress
13.02.2026
Как создать уникальный фильтр для записей WordPress по нескольким параметрам
27.12.2025