В среде WordPress важно поддерживать базу пользователей в актуальном и безопасном состоянии. Наличие неактивных пользователей — тех, кто долгое время не заходил на сайт — может создавать риски безопасности, а также загромождать базу данных. В этой статье подробно разберём, как настроить автоматическое отключение или деактивацию таких пользователей, используя кастомный код и доступные плагины.
Почему важно отключать неактивных пользователей WordPress
Неактивные аккаунты могут стать уязвимыми точками для взлома, особенно если они обладают административными или редакторскими правами. Кроме того, большое количество неактивных пользователей затрудняет администрирование и замедляет работу сайта, особенно если используются плагины для управления пользователями и рассылок.
Автоматизация удаления или отключения таких пользователей позволит:
- Увеличить безопасность сайта.
- Оптимизировать базу данных.
- Снизить нагрузку на сервер.
- Упростить управление пользователями.
Как определить неактивных пользователей: критерии и методы
Главный критерий — дата последнего входа пользователя. К сожалению, WordPress по умолчанию не хранит дату последнего логина, поэтому для отслеживания этого параметра нужно либо использовать плагин, либо добавить собственный код для записи времени входа.
Запись времени последнего входа пользователя
Добавим код, который будет сохранять дату и время входа пользователя в мета-поле:
function wpaddons_update_last_login($login, $user) {
update_user_meta($user->ID, 'wpaddons_last_login', current_time('mysql'));
}
add_action('wp_login', 'wpaddons_update_last_login', 10, 2);Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин. Теперь у каждого пользователя будет сохранена дата последнего входа в мета-поле wpaddons_last_login.
Реализация автоматического отключения неактивных пользователей через код
После того, как вы определили дату последнего входа, можно автоматически отключать пользователей, которые не заходили, например, более 90 дней. В WordPress для этого можно изменить роль пользователя или добавить кастомное поле для блокировки.
Пример кода для деактивации пользователей по сроку неактивности
function wpaddons_deactivate_inactive_users() {
$args = [
'meta_key' => 'wpaddons_last_login',
'meta_value' => date('Y-m-d H:i:s', strtotime('-90 days')),
'meta_compare' => '<=',
'fields' => 'ID',
];
$user_query = new WP_User_Query($args);
$inactive_users = $user_query->get_results();
foreach ($inactive_users as $user_id) {
$user = get_userdata($user_id);
if ($user->has_cap('edit_posts')) { // например, деактивируем только редакторов и выше
wp_update_user([
'ID' => $user_id,
'role' => 'none', // убираем все роли
]);
}
}
}
add_action('wp_scheduled_event_hook', 'wpaddons_deactivate_inactive_users');Данный код предполагает запуск по расписанию — для этого нужно настроить wp_cron. Например, добавим Cron-задание при инициализации:
function wpaddons_schedule_deactivation() {
if (!wp_next_scheduled('wp_scheduled_event_hook')) {
wp_schedule_event(time(), 'daily', 'wp_scheduled_event_hook');
}
}
add_action('wp', 'wpaddons_schedule_deactivation');Такой подход позволит ежедневно проверять и деактивировать пользователей с датой последнего входа более 90 дней назад.
Использование плагинов для автоматизации отключения неактивных пользователей
Если вы не хотите самостоятельно писать код, на рынке есть плагины, которые позволяют автоматизировать подобные процессы.
Плагин Inactive User Deleter
Этот плагин автоматически удаляет или деактивирует пользователей, которые не заходили на сайт в течение заданного времени. Его преимущества:
- Гибкая настройка периода неактивности.
- Возможность отправлять уведомления пользователям перед удалением.
- Исключение определённых ролей из удаления.
Плагин доступен в репозитории WordPress и легко настраивается без кода.
Плагин WP Addons User Manager (примеры интеграции)
Для пользователей, которые хотят расширенную автоматизацию, на WPSHOP доступен плагин WP Addons User Manager, который среди прочего позволяет настроить:
- Автоматическое изменение роли при неактивности.
- Отправку напоминаний.
- Отчёты по активности пользователей.
Интеграция с этим плагином позволит создавать гибкие сценарии управления базой пользователей без необходимости писать код.
Уведомления пользователей перед автоматической деактивацией
Рекомендуется предупреждать пользователей о предстоящей блокировке их аккаунтов, чтобы они могли своевременно зайти и подтвердить активность. Это улучшает пользовательский опыт и снижает количество жалоб.
Пример кода для отправки email-уведомлений за 7 дней до деактивации:
function wpaddons_notify_inactive_users() {
$threshold_date = date('Y-m-d H:i:s', strtotime('-83 days')); // за 7 дней до 90
$args = [
'meta_key' => 'wpaddons_last_login',
'meta_value' => $threshold_date,
'meta_compare' => '=',
];
$user_query = new WP_User_Query($args);
$users_to_notify = $user_query->get_results();
foreach ($users_to_notify as $user_id) {
$user = get_userdata($user_id);
wp_mail($user->user_email, 'Уведомление о неактивности', 'Здравствуйте, вы не заходили на сайт более 83 дней. Если вы не войдёте в течение 7 дней, ваш аккаунт будет деактивирован.');
}
}
add_action('wp_scheduled_notification_hook', 'wpaddons_notify_inactive_users');
function wpaddons_schedule_notification() {
if (!wp_next_scheduled('wp_scheduled_notification_hook')) {
wp_schedule_event(time(), 'daily', 'wp_scheduled_notification_hook');
}
}
add_action('wp', 'wpaddons_schedule_notification');Как сохранить данные при деактивации и восстановить доступ
При деактивации пользователей важно не удалять их данные полностью, чтобы в случае необходимости восстановить доступ без потери контента. Для этого:
- Меняйте роль пользователя на минимальную или кастомную роль без прав.
- Добавляйте мета-данные о статусе пользователя (например,
wpaddons_status = 'deactivated'). - Создавайте интерфейс для администратора с возможностью быстрого восстановления.
Пример кода для восстановления роли:
function wpaddons_reactivate_user($user_id) {
wp_update_user([
'ID' => $user_id,
'role' => 'subscriber', // или исходная роль
]);
delete_user_meta($user_id, 'wpaddons_status');
}Заключение по теме автоматического отключения неактивных пользователей
Автоматическое отключение неактивных пользователей — важный аспект безопасности и оптимизации WordPress-сайта. Использование кастомного кода позволяет гибко настраивать процесс, а плагины облегчают внедрение без программирования. Обязательно предусмотрите уведомления для пользователей и механизмы восстановления доступа, чтобы избежать негативных реакций и потерь данных.