В администрировании WordPress сайтов нередко возникает необходимость очистить базу пользователей от неактивных аккаунтов. Это помогает поддерживать безопасность и ускорять работу сайта за счёт уменьшения нагрузки на базу данных. В этой статье мы рассмотрим, как реализовать автоматическое удаление неактивных пользователей WordPress с помощью собственного кода и стандартных инструментов CMS.
Почему важно удалять неактивных пользователей WordPress
Неактивные пользователи — это аккаунты, которые долгое время не заходили на сайт, не проявляли активности и, возможно, создают угрозу безопасности. Удаление таких пользователей позволяет:
- Снизить риски взлома через заброшенные аккаунты;
- Оптимизировать базу данных, уменьшая её размер и ускоряя запросы;
- Упростить управление пользователями и повысить качество аудитории;
- Минимизировать спам и нежелательную активность.
Особенно актуально для мультисайтов и крупных проектов с большим количеством зарегистрированных пользователей.
Как определить неактивного пользователя в WordPress
Ключевым критериями для определения неактивности являются:
- Отсутствие входов в админку или на сайт в течение определённого времени (например, 6 месяцев);
- Отсутствие публикаций и комментариев;
- Отсутствие обновлений профиля или активности в плагинах.
WordPress хранит дату последнего входа пользователя в метаполе last_login только при использовании специальных плагинов или кастомных решений. По умолчанию такой информации нет, поэтому мы можем использовать либо плагины, либо хук для записи даты последнего входа.
Реализация записи даты последнего входа пользователя
Для начала нам нужно отслеживать дату последнего логина пользователя и сохранять её в метаполе. Вот пример кода, который добавляет дату при успешном входе:
function wpbloger_update_last_login( $login, $user ) {
update_user_meta( $user->ID, 'wpbloger_last_login', current_time('timestamp') );
}
add_action( 'wp_login', 'wpbloger_update_last_login', 10, 2 );Этот код нужно добавить в functions.php вашей темы или в отдельный плагин. Он запишет временную метку последнего входа в метаполе wpbloger_last_login.
Автоматическое удаление неактивных пользователей по времени последнего входа
Теперь можно написать функцию, которая будет запускаться по расписанию (Cron) и удалять пользователей, не заходивших на сайт, например, более 180 дней:
function wpbloger_delete_inactive_users() {
$threshold = time() - 180 * DAY_IN_SECONDS; // 180 дней назад
$args = array(
'meta_key' => 'wpbloger_last_login',
'meta_value' => $threshold,
'meta_compare' => '<',
'fields' => 'ID',
'number' => 50, // ограничение на количество за раз
);
$user_query = new WP_User_Query( $args );
$users = $user_query->get_results();
if ( ! empty( $users ) ) {
foreach ( $users as $user_id ) {
wp_delete_user( $user_id );
}
}
}
// Запланируем Cron задачу, если она не запланирована
if ( ! wp_next_scheduled( 'wpbloger_daily_inactive_user_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpbloger_daily_inactive_user_cleanup' );
}
// Привяжем функцию к Cron
add_action( 'wpbloger_daily_inactive_user_cleanup', 'wpbloger_delete_inactive_users' );Этот код создаст ежедневное задание, проверяющее и удаляющее неактивных пользователей. Мы ограничили удаление 50 пользователями за один раз, чтобы не нагружать сервер.
Дополнительные проверки и улучшения безопасности
Удаление пользователей — серьёзная операция. Рекомендуется добавить проверки:
- Не удалять администраторов и ключевых пользователей;
- Вести лог удалённых аккаунтов для возможного восстановления;
- Оповещать пользователей по email перед удалением;
- Возможность исключить из удаления определённые роли;
- Добавить резервное копирование перед массовым удалением.
Пример исключения администраторов из удаления:
$args['role__not_in'] = array('administrator');Также можно интегрировать плагин Clearfy Pro, который оптимизирует базу и управляет пользователями, дополняя функционал.
Использование готовых плагинов для управления неактивными пользователями
Если вы не хотите писать код, можно использовать плагины, которые автоматизируют этот процесс:
- Inactive User Deleter — позволяет настроить удаление пользователей по периоду неактивности и исключить определённые роли.
- User Cleanup — предлагает расширенный функционал по фильтрации и массовому удалению пользователей.
Однако при использовании плагинов важно проверять их совместимость с вашей версией WordPress и проводить резервные копии.
Резюме и рекомендации по внедрению
Автоматическое удаление неактивных пользователей — эффективный способ поддержания безопасности и оптимизации сайта на WordPress. Реализация через собственный код даёт максимальный контроль и гибкость. Для начала:
- Добавьте код для записи даты последнего входа;
- Настройте Cron-задачу для регулярной очистки;
- Добавьте исключения для важных ролей;
- Тестируйте на тестовом сайте, прежде чем запускать на рабочем;
- Рассмотрите возможность уведомления пользователей и резервного копирования.
Такой подход обеспечит чистоту базы пользователей и снизит риски безопасности вашего сайта.