Управление пользователями — важная задача для владельцев сайтов на WordPress. С течением времени в базе накапливаются неактивные пользователи, которые давно не заходили на сайт и не вносят никакой активности. Это может замедлять работу сайта, создавать угрозы безопасности и усложнять администрирование. В этой статье мы подробно разберём, как безопасно и эффективно удалить неактивных пользователей WordPress, используя кастомный PHP-код и плагины.
Почему важно удалять неактивных пользователей WordPress
Накопление неактивных аккаунтов создает несколько проблем:
- Безопасность. Старые аккаунты с простыми паролями или устаревшими правами могут стать точкой входа для злоумышленников.
- Производительность. Большое количество пользователей замедляет запросы к базе данных, особенно если есть сложные роли и метаполя.
- Управление. Труднее контролировать и анализировать активность, если база заполнена бессмысленными данными.
Удалять пользователей вручную неудобно и рискованно. Лучше автоматизировать процесс, чтобы удалять аккаунты, не проявлявшие активности, например, за последние 6 месяцев или год.
Как определить неактивных пользователей в WordPress
Главный критерий — время последнего входа пользователя. По умолчанию WordPress не сохраняет эту дату, поэтому надо расширить функционал, чтобы отслеживать логины.
Добавляем хранение времени последнего входа
С помощью следующего кода можно сохранить мета-поле с датой последнего входа пользователя:
add_action('wp_login', 'wplab_update_last_login', 10, 2);
function wplab_update_last_login($user_login, $user) {
update_user_meta($user->ID, 'wplab_last_login', current_time('mysql'));
}Этот код нужно добавить в файл functions.php вашей темы или в плагин с пользовательскими функциями. Теперь при каждом входе будет обновляться дата в поле wplab_last_login.
Функция для удаления неактивных пользователей
Далее создадим функцию, которая удалит пользователей, не заходивших на сайт дольше заданного периода (например, 180 дней):
function wplab_delete_inactive_users($days = 180) {
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));
$args = [
'meta_key' => 'wplab_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<=',
'fields' => ['ID'],
'number' => -1,
];
$user_query = new WP_User_Query($args);
$users_to_delete = $user_query->get_results();
if (empty($users_to_delete)) {
return 0;
}
$deleted_count = 0;
foreach ($users_to_delete as $user) {
// Исключаем администраторов
if (in_array('administrator', $user->roles)) {
continue;
}
wp_delete_user($user->ID);
$deleted_count++;
}
return $deleted_count;
}В этом коде мы ищем пользователей с датой последнего входа старше пороговой, исключаем администраторов и удаляем их.
Как запустить функцию удаления и автоматизировать процесс
Для запуска удаления достаточно вызвать функцию wplab_delete_inactive_users() с нужным числом дней, например:
echo 'Удалено пользователей: ' . wplab_delete_inactive_users(180);Для автоматизации можно использовать WP-Cron, чтобы запускать очистку, например, раз в месяц:
if (!wp_next_scheduled('wplab_cron_delete_inactive_users')) {
wp_schedule_event(time(), 'monthly', 'wplab_cron_delete_inactive_users');
}
add_action('wplab_cron_delete_inactive_users', function() {
wplab_delete_inactive_users(180);
});<Этот код добавляет ежемесячное задание на удаление пользователей, неактивных более 180 дней.
Полезные плагины для управления неактивными пользователями
Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:
- Inactive User Deleter — автоматически удаляет или деактивирует неактивных пользователей по заданному времени.
- Clearfy Pro — содержит набор инструментов оптимизации и безопасности, включая работу с пользователями.
Плагины удобны, если вы не хотите писать код и хотите полноценный интерфейс для управления.
Рекомендации по безопасности и резервному копированию
Перед массовым удалением пользователей обязательно сделайте резервную копию базы данных. Это позволит восстановить данные в случае ошибки.
Также не удаляйте пользователей с ролями администратора и редактора, чтобы не потерять важных сотрудников.
Проверьте, что функция удаления работает корректно на тестовом сайте, чтобы избежать случайных потерь.
Как интегрировать очистку пользователей с WPRemark для контроля качества
Если вы используете плагин WPRemark для контроля качества контента, можно дополнительно анализировать активность пользователей по комментариям и оценкам для более точного определения неактивных.
К примеру, можно расширить функцию удаления, проверяя дату последнего комментария или оценки, чтобы исключить активных авторов, которые не заходят в админку, но участвуют в жизни сайта.
Пример дополнительной проверки активности по комментариям
function wplab_is_user_active_by_comments($user_id, $days = 180) {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));
$count = $wpdb->get_var($wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->comments} WHERE user_id = %d AND comment_date > %s",
$user_id, $date_threshold
));
return $count > 0;
}После этого в основной функции можно добавить проверку:
if (wplab_is_user_active_by_comments($user->ID, 180)) {
continue; // пользователь активен по комментариям
}Выводы
Удаление неактивных пользователей — необходимая задача для поддержания безопасности и производительности WordPress сайтов. Использование собственного кода с отслеживанием последнего входа и автоматизацией позволяет гибко управлять этим процессом. Плагины упрощают работу, но требуют дополнительных настроек. Обязательно делайте резервные копии и тщательно тестируйте все изменения.