Если у вас на сайте WordPress накопилось много неактивных пользователей, которые давно не заходили на сайт, это может негативно влиять на безопасность и производительность. В этой статье мы подробно рассмотрим, как автоматически удалять таких пользователей, используя собственные функции и готовые плагины.
Почему важно удалять неактивных пользователей в WordPress
Накопление большого количества неактивных пользователей может привести к нескольким проблемам:
- Безопасность: старые аккаунты часто имеют устаревшие пароли и могут стать целью взлома.
- Нагрузка на базу данных: лишние записи замедляют запросы и увеличивают размер базы.
- Управляемость: сложно контролировать аудиторию и раздавать доступы при большом числе неактивных аккаунтов.
Поэтому регулярная очистка базы пользователей — отличный способ поддерживать сайт в порядке.
Как определить неактивного пользователя в WordPress
Обычно за неактивных пользователей принимают тех, кто не заходил на сайт определённое время, например, 6 месяцев или год. WordPress хранит дату последнего входа в метаполе last_login только если вы используете соответствующие плагины или реализуете это самостоятельно. По умолчанию WordPress не сохраняет дату последнего входа, поэтому нужно либо внедрить эту функцию, либо ориентироваться на дату последней активности (например, последнего комментария, поста или регистрации).
Добавление отслеживания даты последнего входа
Для начала нужно записывать дату последнего входа пользователя. Добавим в файл functions.php вашей темы или в отдельный плагин следующий код:
add_action('wp_login', 'wordpressa_update_last_login', 10, 2);
function wordpressa_update_last_login($user_login, $user) {
update_user_meta($user->ID, 'wordpressa_last_login', current_time('timestamp'));
}
Этот хук срабатывает при входе пользователя и сохраняет текущий timestamp в мета пользователя wordpressa_last_login.
Автоматическое удаление неактивных пользователей с помощью кода
Теперь, когда у нас есть дата последнего входа, можно написать функцию, которая будет удалять пользователей, не заходивших, например, более 180 дней (6 месяцев).
function wordpressa_delete_inactive_users() {
$days_inactive = 180; // Порог неактивности в днях
$threshold = strtotime('-' . $days_inactive . ' days');
$args = array(
'meta_key' => 'wordpressa_last_login',
'meta_value' => $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) {
require_once(ABSPATH . 'wp-admin/includes/user.php');
wp_delete_user($user_id);
}
}
}
// Запуск функции вручную или через WP-Cron
// wordpressa_delete_inactive_users();
Этот скрипт ищет всех пользователей, у которых дата последнего входа в метаполе меньше порогового значения, и удаляет их.
Автоматизация задачи с помощью WP-Cron
Чтобы запускать удаление автоматически, добавим задачу в WP-Cron, выполняющуюся, например, раз в сутки:
if (!wp_next_scheduled('wordpressa_daily_delete_inactive_users')) {
wp_schedule_event(time(), 'daily', 'wordpressa_daily_delete_inactive_users');
}
add_action('wordpressa_daily_delete_inactive_users', 'wordpressa_delete_inactive_users');
Так вы будете регулярно чистить базу от неактивных аккаунтов без ручного вмешательства.
Использование плагинов для удаления неактивных пользователей
Если вы не хотите писать код, есть несколько плагинов, которые решают задачу удаления неактивных пользователей:
- Inactive User Deleter — позволяет удалять пользователей, не заходивших в систему заданное время, настраивается через админку.
- Users Insights — плагин для анализа активности пользователей, есть возможность фильтровать и массово удалять неактивных.
- WP-User-Manager — расширенный менеджер пользователей с опцией удаления по активности.
Использование плагина удобно, если вы хотите управлять удалением через интерфейс и получить дополнительные возможности по фильтрации.
Обработка исключений и безопасность удаления
При автоматическом удалении важно учесть, что некоторые пользователи могут быть исключены из очистки:
- Администраторы и редакторы обычно не удаляются.
- Пользователи с важными ролями или привязками к контенту.
- Лучше создавать резервные копии пользователей или базы перед массовым удалением.
Для исключения администраторов добавьте в функцию удаления проверку роли:
foreach ($users_to_delete as $user_id) {
$user = get_userdata($user_id);
if (in_array('administrator', $user->roles)) {
continue; // не удаляем админов
}
wp_delete_user($user_id);
}
Заключение
Автоматическое удаление неактивных пользователей в WordPress — важная задача для поддержания безопасности и производительности сайта. С помощью простого кода и WP-Cron можно настроить регулярную очистку, а плагины помогут сделать это без программирования. Внедряйте эти решения на своих сайтах, чтобы держать базу данных в чистоте и исключить потенциальные риски.
Для расширенных возможностей управления пользователями рекомендую взглянуть на плагины в каталоге WPSHOP.