Большинство сайтов на WordPress накапливают большое количество пользователей, которые долго не заходили на сайт или вообще не активны. Это не только создаёт нагрузку на базу данных, но и потенциально увеличивает риски безопасности. В этой статье разберём, как идентифицировать и удалить неактивных пользователей WordPress с помощью кода и минимально популярных плагинов.
Почему важно удалять неактивных пользователей WordPress
Со временем база пользователей может разрастись до тысяч аккаунтов, из которых многие давно не использовались. Удаление таких пользователей помогает:
- Сократить размер базы данных и ускорить запросы.
- Уменьшить риск взлома через скомпрометированные неактивные аккаунты.
- Поддерживать порядок и актуальность данных пользователей.
Большинство стандартных плагинов не включают функции массового удаления пользователей по дате последнего входа, поэтому мы рассмотрим, как это реализовать программно и с помощью вспомогательных решений.
Определяем неактивных пользователей по дате последнего входа
WordPress по умолчанию не хранит дату последнего входа в пользовательских метаданных. Для начала нужно добавить механизм записи даты входа пользователя, если он ещё не реализован на вашем сайте.
Добавление записи даты последнего входа
Для этого можно использовать хук wp_login, чтобы сохранять текущую дату как мета-данные пользователя:
function wp1_update_last_login($user_login, $user) {
update_user_meta($user->ID, 'wp1_last_login', current_time('mysql'));
}
add_action('wp_login', 'wp1_update_last_login', 10, 2);Этот код сохраняет дату входа в формате MySQL в метаданные пользователя wp1_last_login. Теперь можно получить этих данные и фильтровать пользователей по времени последнего входа.
Удаление неактивных пользователей через пользовательский скрипт
После того, как дата последнего входа хранится, можно написать функцию, которая удалит всех пользователей, не заходивших, например, больше года.
Пример функции удаления неактивных пользователей
function wp1_delete_inactive_users($days = 365) {
global $wpdb;
$date_limit = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));
// Получаем 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 = 'wp1_last_login'
WHERE um.meta_value IS NULL OR um.meta_value < %s",
$date_limit
));
if (empty($user_ids)) {
return 0; // Нет неактивных пользователей
}
foreach ($user_ids as $user_id) {
wp_delete_user($user_id);
}
return count($user_ids);
}Функция принимает параметр $days — количество дней неактивности. По умолчанию 365. Она находит пользователей с датой последнего входа старше указанного периода или без такой даты и удаляет их.
Как запустить удаление
Вы можете вызвать эту функцию вручную, например, из плагина или темы, либо создать WP-CLI команду или задачу CRON для автоматизации.
Пример вызова:
add_action('admin_init', function() {
if (current_user_can('administrator') && isset($_GET['wp1_delete_inactive'])) {
$deleted = wp1_delete_inactive_users(365);
echo "Удалено пользователей: " . intval($deleted);
exit;
}
});После добавления этого кода достаточно перейти в админ-панели по URL your-site.ru/wp-admin/?wp1_delete_inactive=1, чтобы запустить удаление.
Использование плагинов для мониторинга и удаления неактивных пользователей
Если вы не хотите писать код, можно воспользоваться плагинами, которые помогут в мониторинге активности пользователей и их удалении.
Плагин «Inactive User Deleter»
Этот плагин позволяет удалять пользователей, которые не заходили на сайт в течение заданного периода. Он использует метаданные с датой последнего входа, поэтому сначала добавьте код для записи даты входа, описанный выше, или используйте плагин WP Last Login.
Основные функции плагина:
- Фильтрация пользователей по дате последнего входа
- Массовое удаление выбранных пользователей
- Запланированные задания для автоматической очистки
Плагин «WP Last Login»
Этот плагин записывает дату последнего входа пользователя и отображает её в админке. В сочетании с «Inactive User Deleter» можно эффективно контролировать и удалять неактивных пользователей.
Рекомендации по безопасности при удалении пользователей
Перед массовым удалением пользователей обязательно сделайте резервную копию базы данных. Ошибочное удаление может привести к потере важных данных.
Кроме того, учитывайте, что некоторые пользователи могут быть важны для работы сайта (например, редакторы, авторы), даже если они не заходили длительное время. Рекомендуется фильтровать по ролям и не удалять администраторов.
Пример добавления фильтра по роли в функцию удаления:
function wp1_delete_inactive_users_filtered($days = 365, $excluded_roles = array('administrator', 'editor')) {
global $wpdb;
$date_limit = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));
$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 = 'wp1_last_login'
LEFT JOIN {$wpdb->usermeta} r ON u.ID = r.user_id AND r.meta_key = '{$wpdb->prefix}capabilities'
WHERE (um.meta_value IS NULL OR um.meta_value < %s)",
$date_limit
));
foreach ($user_ids as $key => $user_id) {
$user = get_userdata($user_id);
foreach ($excluded_roles as $role) {
if (in_array($role, $user->roles)) {
unset($user_ids[$key]);
break;
}
}
}
if (empty($user_ids)) {
return 0;
}
foreach ($user_ids as $user_id) {
wp_delete_user($user_id);
}
return count($user_ids);
}Выводы и лучшие практики
Удаление неактивных пользователей — важная задача для поддержания производительности и безопасности сайта на WordPress. Используйте запись даты последнего входа, чтобы точно идентифицировать неактивных пользователей.
Комбинируйте кодовые решения с плагинами для удобства, не забывайте делать резервные копии и исключать из удаления важные роли.
Регулярно проводите такую очистку, чтобы база пользователей оставалась актуальной и безопасной.