Ведение чистой и актуальной базы пользователей — важная задача для любого сайта на WordPress. Особенно это актуально для площадок с регистрацией пользователей, форумов, магазинов и образовательных порталов. Неактивные пользователи не только занимают место в базе данных, но и могут представлять угрозу безопасности. В этой статье разберём, как автоматизировать удаление таких аккаунтов с помощью кода и готовых решений.
Почему важно удалять неактивных пользователей WordPress
Большинство сайтов на WordPress со временем накапливают большое количество пользователей, которые либо никогда не заходили на сайт после регистрации, либо давно не проявляли активности. Вот основные причины, почему стоит удалять таких пользователей:
- Оптимизация базы данных. Меньше записей — быстрее работает сайт и резервное копирование.
- Безопасность. Заброшенные аккаунты часто становятся целью взлома.
- Удобство. Администратору легче управлять актуальной аудиторией.
Удаление пользователей вручную — рутинная и утомительная задача. Автоматизация значительно упростит процесс.
Как определить неактивного пользователя
Сначала нужно определить критерии неактивности. Самые распространённые варианты:
- Отсутствие входа на сайт более X дней (например, 180 или 365).
- Отсутствие публикаций или комментариев за период.
- Отсутствие активности в пользовательских метах.
Для большинства задач достаточно ориентироваться на дату последнего входа — last_login. По умолчанию WordPress не сохраняет дату входа в профиле, но можно добавить эту функциональность с помощью плагинов или кода.
Добавление отслеживания последнего входа пользователя
Чтобы реализовать автоматическое удаление, сначала нужно сохранить дату последнего входа. Пример кода для wpabout.ru:
function wpabout_update_last_login( $login, $user ) {
update_user_meta( $user->ID, 'wpabout_last_login', current_time( 'mysql' ) );
}
add_action( 'wp_login', 'wpabout_update_last_login', 10, 2 );Этот код сохраняет дату и время входа пользователя в мета-поле wpabout_last_login. Оно будет использоваться для проверки неактивности.
Автоматическое удаление неактивных пользователей с помощью кода
Теперь реализуем функцию, которая будет искать и удалять пользователей, не заходивших, например, более 180 дней:
function wpabout_delete_inactive_users() {
$threshold = date( 'Y-m-d H:i:s', strtotime( '-180 days' ) );
$args = array(
'meta_key' => 'wpabout_last_login',
'meta_value' => $threshold,
'meta_compare' => '<',
'fields' => 'ID',
);
$users = get_users( $args );
foreach ( $users as $user_id ) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user( $user_id );
}
}
// Запуск по расписанию WP-Cron
if ( ! wp_next_scheduled( 'wpabout_daily_user_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpabout_daily_user_cleanup' );
}
add_action( 'wpabout_daily_user_cleanup', 'wpabout_delete_inactive_users' );Этот код создаёт ежедневное событие, которое удаляет всех пользователей, не заходивших на сайт более 180 дней. Можно менять период по необходимости.
Готовые плагины для удаления неактивных пользователей
Если писать код неудобно, можно использовать плагины с похожим функционалом. Вот несколько проверенных вариантов:
- Inactive User Deleter — позволяет удалять пользователей по времени последнего входа, статуса и ролям. Очень простой и эффективный.
- WP Bulk Delete — универсальный плагин для массового удаления контента и пользователей с гибкими условиями.
- Clearfy Pro — расширенный набор оптимизаций, в том числе инструменты работы с пользователями и безопасностью.
Все эти плагины можно найти и скачать на WPSHOP.ru.
Как обезопасить процесс удаления пользователей
Перед автоматическим удалением учитывайте следующие рекомендации:
- Создайте резервную копию базы данных.
- Исключайте из удаления администраторов и важных ролей.
- Оповещайте пользователей о скором удалении аккаунта (например, через email).
Для исключения админов можно в коде добавить параметр:
$args['role__not_in'] = array('Administrator');Пример расширения — уведомление пользователя перед удалением
Можно отправлять письма за 7 дней до удаления. Для этого нужно сохранить дату предупреждения и запускать отдельный WP-Cron:
function wpabout_notify_inactive_users() {
$notify_threshold = date( 'Y-m-d H:i:s', strtotime( '-173 days' ) ); // 7 дней до удаления
$args = array(
'meta_key' => 'wpabout_last_login',
'meta_value' => $notify_threshold,
'meta_compare' => '<',
'fields' => 'all_with_meta',
);
$users = get_users( $args );
foreach ( $users as $user ) {
if ( ! get_user_meta( $user->ID, 'wpabout_inactive_warning_sent', true ) ) {
wp_mail(
$user->user_email,
'Уведомление о предстоящем удалении аккаунта',
'Здравствуйте! Ваш аккаунт не проявлял активности более 173 дней. Он будет удалён через 7 дней, если активность не возобновится.'
);
update_user_meta( $user->ID, 'wpabout_inactive_warning_sent', 1 );
}
}
}
// Запуск уведомлений каждодневно
if ( ! wp_next_scheduled( 'wpabout_daily_user_notify' ) ) {
wp_schedule_event( time(), 'daily', 'wpabout_daily_user_notify' );
}
add_action( 'wpabout_daily_user_notify', 'wpabout_notify_inactive_users' );Такой подход повышает лояльность пользователей и снижает риск удаления важных аккаунтов.
Итоговые рекомендации по автоматизации удаления неактивных пользователей
Автоматизация удаления неактивных пользователей помогает поддерживать порядок в базе, улучшать безопасность и производительность сайта. Рекомендуем:
- Добавить сохранение последнего входа пользователя.
- Настроить WP-Cron для периодической проверки.
- Исключать администраторов и важные роли.
- Использовать уведомления перед удалением.
- Регулярно создавать резервные копии.
Если не хочется писать код — воспользуйтесь плагинами Inactive User Deleter или WP Bulk Delete, доступными на WPSHOP.ru.