Управление базой пользователей — важный аспект администрирования WordPress-сайта. Со временем на сайте накапливаются неактивные аккаунты, которые могут занимать лишние ресурсы, создавать потенциальные угрозы безопасности и мешать аналитике. В этой статье мы подробно разберем, как автоматически удалять неактивных пользователей в WordPress, используя кастомный код и плагины.
Почему важно удалять неактивных пользователей WordPress
Неактивные пользователи — это аккаунты, которые долгое время не заходили на сайт. Их наличие может привести к нескольким проблемам:
- Безопасность: Старые аккаунты с слабыми паролями — мишень для хакеров.
- Производительность: Большое количество пользователей замедляет работу админ-панели и увеличивает нагрузку на базу данных.
- Аналитика: Искажение данных о вовлеченности и активности.
Регулярное удаление таких пользователей помогает поддерживать сайт в порядке и снижать риски.
Критерии определения неактивных пользователей
Для начала нужно определить, кого считать неактивным. Обычно это пользователи, которые не заходили на сайт в течение определенного периода, например, 6 или 12 месяцев. В WordPress для этого можно использовать поле last_login, но по умолчанию WordPress не сохраняет дату последнего входа. Значит, первым шагом будет добавить отслеживание последнего логина.
Как добавить отслеживание последнего входа пользователя
Добавим код, который будет сохранять дату последнего входа пользователя в метаполе при успешной авторизации:
function wpcodes_save_last_login($login) {
$user = get_user_by('login', $login);
if ($user) {
update_user_meta($user->ID, 'wpcodes_last_login', current_time('mysql'));
}
}
add_action('wp_login', 'wpcodes_save_last_login');Этот код сохраняет дату и время входа пользователя в формате MySQL DATETIME в метаполе wpcodes_last_login.
Автоматическое удаление неактивных пользователей с помощью кода
Теперь, когда у нас есть данные о последнем входе, можно написать функцию, которая будет удалять пользователей, не заходивших определенное время. Например, удалим пользователей, неактивных более 180 дней.
function wpcodes_delete_inactive_users() {
$days_inactive = 180; // Порог неактивности в днях
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));
$args = array(
'meta_key' => 'wpcodes_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)) {
foreach ($users_to_delete as $user_id) {
// Исключаем администратора с ID 1
if ($user_id != 1) {
wp_delete_user($user_id);
}
}
}
}
// Запуск функции через wp_cron или вручную
// wpcodes_delete_inactive_users();В этом примере мы получаем ID всех пользователей, у которых дата последнего входа меньше или равна пороговой дате, и удаляем их, кроме администратора с ID 1.
Как автоматизировать запуск удаления по расписанию
Чтобы удаление выполнялось автоматически, добавим вызов функции в планировщик WordPress (wp_cron):
function wpcodes_schedule_inactive_user_deletion() {
if (!wp_next_scheduled('wpcodes_cron_delete_inactive_users')) {
wp_schedule_event(time(), 'daily', 'wpcodes_cron_delete_inactive_users');
}
}
add_action('wp', 'wpcodes_schedule_inactive_user_deletion');
add_action('wpcodes_cron_delete_inactive_users', 'wpcodes_delete_inactive_users');Этот код запускает удаление раз в день. Вы можете изменить период, заменив 'daily' на 'weekly' или 'hourly' по необходимости.
Использование плагинов для удаления неактивных пользователей
Если вы предпочитаете готовые решения, есть несколько плагинов, которые могут помочь:
- Inactive User Deleter — позволяет настроить порог неактивности и автоматически удалять пользователей. Можно настроить уведомления перед удалением.
- WP Bulk Delete — мощный инструмент для массового удаления пользователей по различным критериям, включая дату последнего входа.
Для интеграции с плагинами из WPShop.ru можно использовать, например, Clearfy Pro, который помогает управлять безопасностью и оптимизацией сайта, в том числе и пользователями.
Пример настройки Clearfy Pro для безопасности пользователей
Clearfy Pro включает функции для ограничения попыток входа и управления пользователями, что снижает риск взлома неактивных аккаунтов. Подробнее о настройке можно узнать на странице плагина: Clearfy Pro на WPShop.
Безопасность и резервное копирование перед удалением
Перед тем как запускать автоматическое удаление пользователей, важно:
- Сделать резервную копию сайта и базы данных.
- Убедиться, что вы исключаете администраторов и важных пользователей из удаления.
- При возможности уведомлять пользователей перед удалением.
Можно добавить отправку уведомления, если нужно предупредить пользователя о предстоящем удалении. Например, по email за 7 дней до удаления.
Расширенные возможности: удаление по ролям и активности
Иногда нужно удалять неактивных пользователей только определенной роли, например, подписчиков или клиентов. Для этого можно добавить параметр role в WP_User_Query:
$args = array(
'role' => 'subscriber',
'meta_key' => 'wpcodes_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<=',
'fields' => 'ID',
'number' => -1,
);Также можно учитывать не только дату последнего входа, но и дату регистрации или другие мета-данные для более точного отбора.
Удаление пользователей с пустой датой последнего входа
Если пользователь никогда не входил, поле wpcodes_last_login будет отсутствовать. Чтобы удалить таких пользователей, добавим отдельный запрос:
$args_no_login = array(
'meta_query' => array(
array(
'key' => 'wpcodes_last_login',
'compare' => 'NOT EXISTS',
),
),
'fields' => 'ID',
'number' => -1,
);
$user_query_no_login = new WP_User_Query($args_no_login);
$users_to_delete_no_login = $user_query_no_login->get_results();Эти пользователи также могут быть удалены, если они зарегистрировались давно и не активировались.
Итоги и рекомендации
Автоматическое удаление неактивных пользователей — необходимая практика для поддержания безопасности и производительности WordPress-сайта. Используйте отслеживание последнего входа, планировщик задач wp_cron и фильтры по ролям, чтобы точно управлять базой пользователей.
Если вы хотите более гибкое и масштабируемое решение, рассмотрите использование готовых плагинов, например, WP Bulk Delete или Inactive User Deleter с WPShop.