В крупных и средних проектах на WordPress со временем накапливается большое количество пользователей, которые давно не заходили на сайт. Это не только загромождает базу данных, но и может стать причиной проблем с безопасностью и производительностью. В этой статье мы подробно разберём, как можно найти и удалить таких неактивных пользователей с помощью пользовательского кода, а также рассмотрим варианты автоматизации этого процесса.
Почему важно удалять неактивных пользователей WordPress
Пользователи, которые не заходили на сайт длительное время, могут создавать ряд проблем:
- Безопасность: неиспользуемые аккаунты с слабыми паролями или устаревшими правами доступа могут стать уязвимостью;
- Производительность: большое количество пользователей влияет на скорость запросов к базе данных;
- Удобство администрирования: легче управлять актуальной базой пользователей;
- Оптимизация базы данных: удаление ненужных записей помогает поддерживать базу в порядке.
Удаление неактивных пользователей — это хорошая практика, которая входит в комплексное обслуживание сайта.
Как определить неактивных пользователей: критерии и подходы
Основной критерий — дата последнего входа пользователя на сайт. По умолчанию WordPress не хранит дату последнего логина, поэтому сначала нужно добавить эту функциональность.
Добавление записи даты последнего входа
Для начала создадим функцию, которая будет сохранять дату и время последнего входа пользователя в метаданные пользователя. Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:
function wpto_update_last_login($login, $user) {
update_user_meta($user->ID, 'wpto_last_login', current_time('mysql'));
}
add_action('wp_login', 'wpto_update_last_login', 10, 2);Теперь каждый раз, когда пользователь входит на сайт, у него в метаданных будет обновляться поле wpto_last_login с текущей датой и временем.
Получение списка неактивных пользователей
Для удаления нам нужно выбрать пользователей, у которых дата последнего входа была, например, более 6 месяцев назад, или у которых это поле отсутствует (то есть они никогда не заходили).
Пример функции для выборки таких пользователей:
function wpto_get_inactive_users($months = 6) {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . intval($months) . ' months'));
// Получаем ID пользователей, у которых дата последнего входа меньше пороговой или отсутствует
$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 = 'wpto_last_login'
WHERE um.meta_value < %s OR um.meta_value IS NULL",
$date_threshold
));
return $user_ids;
}Эта функция вернёт массив ID пользователей, которые не активны по заданному порогу.
Как безопасно удалить неактивных пользователей WordPress
Удалять пользователей следует осторожно, чтобы не потерять важные данные, связанные с их контентом (например, записи или комментарии). WordPress позволяет при удалении пользователя переназначать его контент другому пользователю.
Функция удаления с переназначением контента
Создадим функцию для безопасного удаления пользователей с переназначением контента администратору сайта:
function wpto_delete_inactive_users($months = 6) {
$inactive_user_ids = wpto_get_inactive_users($months);
if (empty($inactive_user_ids)) {
return 'Неактивных пользователей не найдено';
}
// Получаем ID администратора для переназначения контента
$admin_user = get_users(array(
'role' => 'administrator',
'number' => 1,
'orderby' => 'ID',
'order' => 'ASC'
));
$admin_id = $admin_user ? $admin_user[0]->ID : 1;
$deleted_count = 0;
foreach ($inactive_user_ids as $user_id) {
require_once(ABSPATH . 'wp-admin/includes/user.php');
wp_delete_user($user_id, $admin_id);
$deleted_count++;
}
return "Удалено пользователей: " . $deleted_count;
}Вызывая функцию wpto_delete_inactive_users(), вы удалите всех пользователей, которые не заходили более 6 месяцев, при этом их записи будут переназначены администратору.
Автоматизация удаления неактивных пользователей с помощью WP-Cron
Чтобы не запускать ручную очистку, можно автоматизировать процесс с помощью встроенного планировщика заданий WordPress — WP-Cron.
Регистрация планового задания
Добавьте следующий код для создания ежемесячного задания удаления неактивных аккаунтов:
function wpto_register_cron_job() {
if (!wp_next_scheduled('wpto_delete_inactive_users_event')) {
wp_schedule_event(time(), 'monthly', 'wpto_delete_inactive_users_event');
}
}
add_action('wp', 'wpto_register_cron_job');
add_action('wpto_delete_inactive_users_event', function() {
$result = wpto_delete_inactive_users(6); // 6 месяцев
error_log($result); // Записываем результат в лог
});Теперь каждый месяц WordPress будет автоматически удалять пользователей, которые не заходили на сайт более полугода.
Альтернативные решения и плагины для управления пользователями
Если не хочется писать код, можно воспользоваться специализированными плагинами. Например:
- Clearfy Pro — многофункциональный плагин для оптимизации WordPress, в котором есть инструменты для управления пользователями и очистки базы.
- Inactive User Deleter — плагин для автоматического удаления неактивных пользователей по заданным критериям.
Однако собственное решение, описанное в статье, даёт гибкость настройки и возможность интегрировать удаление в другие процессы сайта.
Выводы и рекомендации по безопасности
Удаление неактивных пользователей — важный этап поддержки сайта. Обязательно:
- Перед удалением сделайте резервную копию базы данных;
- Переназначайте контент, чтобы избежать потери данных;
- Документируйте и логируйте процесс удаления;
- Настройте уведомления, если это необходимо, чтобы информировать администраторов;
- Проверьте, что автоматизация не приведёт к удалению важных аккаунтов.
Таким образом, регулярно очищая базу пользователей, вы обеспечите безопасность, улучшите производительность и качество администрирования вашего WordPress-сайта.