В крупных проектах на WordPress со временем накапливается большое количество пользователей, которые регистрировались, но долгое время не заходили на сайт. Это не только загромождает базу данных, но и может создавать риски безопасности. Поэтому полезной задачей становится автоматическое удаление таких неактивных пользователей по заданным критериям.
Почему важно удалять неактивных пользователей
Неактивные пользователи — это учетные записи, которые долго не авторизовывались и, вероятно, не планируют возвращаться. Их хранение создает несколько проблем:
- Увеличение размера базы данных и замедление запросов.
- Риск взлома или использования скомпрометированных аккаунтов.
- Загромождение панели администрирования и неудобство управления пользователями.
Удаление таких пользователей помогает поддерживать базу в оптимальном состоянии и предотвращает потенциальные угрозы.
Как определить неактивного пользователя в WordPress
Для удаления нужно понимать, по какому критерию считать пользователя неактивным. В WordPress есть несколько способов узнать активность пользователя:
- Дата последнего входа: по умолчанию WordPress не хранит дату последнего входа, но это можно реализовать с помощью плагинов или пользовательского кода.
- Дата регистрации: если пользователь никогда не входил, можно ориентироваться на дату регистрации.
- Последняя активность: в некоторых случаях используют плагины активности, которые отслеживают события пользователя.
Для практического решения мы будем использовать дату последнего входа, которую будем записывать самостоятельно.
Шаг 1. Сохраняем дату последнего входа пользователя
Для этого добавим в файл functions.php вашей темы или в свой плагин следующий код, который обновляет мета-данные пользователя при каждом входе:
function wpplugins_update_last_login($login, $user) {
update_user_meta($user->ID, '_wpplugins_last_login', current_time('mysql'));
}
add_action('wp_login', 'wpplugins_update_last_login', 10, 2);Этот код записывает текущую дату и время в пользовательское поле _wpplugins_last_login при успешном входе.
Шаг 2. Создаем функцию для удаления неактивных пользователей
Теперь напишем функцию, которая найдет всех пользователей, не заходивших более заданного количества дней, и удалит их:
function wpplugins_delete_inactive_users($days = 180) {
$date_limit = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));
$args = [
'meta_key' => '_wpplugins_last_login',
'meta_value' => $date_limit,
'meta_compare' => '<',
'fields' => 'ID',
'number' => -1,
];
$user_query = new WP_User_Query($args);
$users_to_delete = $user_query->get_results();
foreach ($users_to_delete as $user_id) {
if (!user_can($user_id, 'administrator')) { // не удаляем админов
wp_delete_user($user_id);
}
}
return count($users_to_delete);
}Здесь мы ищем пользователей с последним входом раньше, чем $days дней назад, и удаляем их, пропуская администраторов.
Шаг 3. Автоматизируем удаление с WP-Cron
Чтобы удаление происходило регулярно, настроим задачу Cron:
function wpplugins_schedule_user_cleanup() {
if (!wp_next_scheduled('wpplugins_daily_user_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpplugins_daily_user_cleanup');
}
}
add_action('wp', 'wpplugins_schedule_user_cleanup');
function wpplugins_daily_cleanup_callback() {
$deleted_count = wpplugins_delete_inactive_users(180); // удаляем неактивных более 180 дней
if ($deleted_count > 0) {
error_log("[WPPlugins] Удалено неактивных пользователей: " . $deleted_count);
}
}
add_action('wpplugins_daily_user_cleanup', 'wpplugins_daily_cleanup_callback');Этот код запустит очистку пользователей один раз в сутки.
Дополнительные советы и плагины для управления пользователями
Если не хочется писать код, можно использовать готовые плагины для управления пользователями и их активностью:
- Inactive User Deleter — удаляет неактивных пользователей по заданным параметрам.
- Clearfy Pro — комплекс оптимизации сайта, в том числе управление пользователями и безопасность.
Использование таких инструментов позволит гибко настраивать удаление и улучшать безопасность вашего сайта.
Учет особенностей и предупреждения
Перед внедрением автоматического удаления обязательно сделайте резервную копию базы данных. Также хорошо уведомить пользователей о возможном удалении аккаунтов из-за неактивности, чтобы они могли своевременно войти и сохранить доступ.
Если на сайте есть важные пользователи с особым статусом, дополнительно проверяйте их роли и не удаляйте по ошибке.
Итог
Автоматическое удаление неактивных пользователей — полезная практика для поддержки чистоты базы и повышения безопасности сайта. С помощью нескольких строк кода и настроек WP-Cron можно легко реализовать эту функциональность самостоятельно без сторонних плагинов.