В крупных проектах на WordPress количество пользователей со временем растет, в том числе появляется много неактивных аккаунтов. Они занимают место в базе данных, замедляют работу сайта и могут создавать риски безопасности. В этой статье разберем, как автоматизировать процесс удаления неактивных пользователей в WordPress с помощью кастомного кода и плагинов.
Почему важно удалять неактивных пользователей WordPress
Неактивные пользователи — это те, кто давно не заходил на сайт, не оставлял активности, а их аккаунты продолжают храниться в базе. Такие учетные записи создают несколько проблем:
- Увеличение размера базы данных и замедление запросов;
- Риски безопасности из-за забытых аккаунтов с правами доступа;
- Сложности при администрировании и анализе пользователей;
- Потенциальные проблемы с GDPR и другими законами о защите данных.
Регулярное удаление неактивных пользователей помогает поддерживать сайт в оптимальном состоянии.
Как определить неактивных пользователей: критерии выбора
Ключевой момент — правильно определить, кого считать неактивным. Обычно берутся следующие критерии:
- Дата последнего входа (last_login);
- Дата последней активности на сайте (комментарии, публикации, заказы);
- Роль пользователя — например, удалять только подписчиков, оставлять админов;
- Продолжительность неактивности — 3, 6, 12 месяцев и более.
Для хранения даты последнего входа можно использовать плагины или добавить собственный код, который записывает время авторизации пользователя.
Добавление сохранения даты последнего входа пользователя
WordPress по умолчанию не хранит дату последнего входа, поэтому добавим это самостоятельно. В functions.php темы или в своем плагине добавим следующий код:
function wporder_save_last_login( $user_login, $user ) {
update_user_meta( $user->ID, 'wporder_last_login', current_time('mysql') );
}
add_action( 'wp_login', 'wporder_save_last_login', 10, 2 );Этот код сохраняет текущую дату и время при каждом входе пользователя в мета-данные с ключом wporder_last_login.
Автоматическое удаление неактивных пользователей по дате последнего входа
Теперь напишем функцию, которая будет удалять пользователей, у которых дата последнего входа старше заданного срока. Например, 180 дней (6 месяцев).
function wporder_delete_inactive_users() {
$days_inactive = 180; // количество дней неактивности
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));
$args = array(
'meta_key' => 'wporder_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'fields' => 'ID',
'number' => 100,
'role__in' => array('subscriber', 'customer'), // роли, которые хотим проверять
);
$user_query = new WP_User_Query($args);
$users_to_delete = $user_query->get_results();
if (empty($users_to_delete)) {
return;
}
foreach ($users_to_delete as $user_id) {
wp_delete_user($user_id);
}
}
// Запуск по крону или вручную
// wporder_delete_inactive_users();Этот код ищет пользователей с мета-ключом wporder_last_login, у которых дата входа раньше пороговой, и удаляет их.
Настройка периодического запуска через WP-Cron
Чтобы делать это автоматически, зарегистрируем крон-задачу, которая будет запускаться, например, раз в неделю.
function wporder_schedule_cron_job() {
if (!wp_next_scheduled('wporder_delete_inactive_users_cron')) {
wp_schedule_event(time(), 'weekly', 'wporder_delete_inactive_users_cron');
}
}
add_action('wp', 'wporder_schedule_cron_job');
add_action('wporder_delete_inactive_users_cron', 'wporder_delete_inactive_users');Теперь функция wporder_delete_inactive_users будет автоматически запускаться каждую неделю и удалять неактивных пользователей.
Использование плагинов для удаления неактивных пользователей
Если вы не хотите писать код, существуют плагины, которые помогают управлять пользователями по активности:
- Inactive User Deleter — позволяет удалять пользователей, которые не заходили на сайт определенное время;
- Clearfy Pro — многофункциональный оптимизатор, среди функций есть управление и очистка пользователей;
- User Expire — позволяет устанавливать срок действия учетных записей.
Плагины удобны для тех, кто не хочет углубляться в код, но кастомные решения дают больше контроля и позволяют интегрировать удаление в свои бизнес-процессы.
Как избежать случайного удаления важных пользователей
Очень важно не удалить администратора или других важных пользователей. Для этого в коде мы ограничили роли для удаления — только подписчики и клиенты. Если у вас есть другие роли, добавьте их в role__in или исключите нужные.
Также можно добавить проверку, чтобы не удалять пользователей с определенными метками или статусами:
foreach ($users_to_delete as $user_id) {
$user = get_userdata($user_id);
if (in_array('administrator', $user->roles)) {
continue; // пропускаем админов
}
wp_delete_user($user_id);
}Такой подход снизит риски ошибочного удаления.
Логирование и уведомления при удалении пользователей
Для контроля процесса полезно вести лог удаления и отправлять уведомления администратору. Добавим пример логирования в файл:
function wporder_delete_inactive_users() {
$days_inactive = 180;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));
$args = array(
'meta_key' => 'wporder_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'fields' => 'ID',
'number' => 100,
'role__in' => array('subscriber', 'customer'),
);
$user_query = new WP_User_Query($args);
$users_to_delete = $user_query->get_results();
if (empty($users_to_delete)) {
return;
}
$log = '';
foreach ($users_to_delete as $user_id) {
$user_info = get_userdata($user_id);
$log .= 'Удален пользователь: ' . $user_info->user_login . ' (ID: ' . $user_id . ')\n';
wp_delete_user($user_id);
}
error_log($log);
// Отправка письма администратору
wp_mail(get_option('admin_email'), 'Удалены неактивные пользователи', $log);
}Так вы будете в курсе, кто и когда был удален.
Заключение
Автоматизация удаления неактивных пользователей в WordPress — важный этап поддержания сайта в чистоте и безопасности. С помощью простого кода и WP-Cron можно настроить регулярное удаление по вашим критериям. Если нужно — используйте готовые плагины, например Clearfy Pro, которые расширяют возможности по управлению пользователями и оптимизации.
Используйте предложенные методы и адаптируйте их под свои задачи — это поможет сохранить скорость сайта, порядок в базе данных и повысить безопасность вашего проекта на WordPress.