Управление пользователями — важный аспект администрирования сайта на WordPress. Особенно актуально регулярно очищать базу от неактивных пользователей, чтобы повысить безопасность и оптимизировать работу сайта. В этой статье разберем, как автоматически удалять и блокировать неактивных пользователей WordPress, используя плагины и кастомные решения с примерами кода.
Почему важно удалять и блокировать неактивных пользователей WordPress
Неактивные пользователи могут создавать уязвимости и нагружать базу данных. Часто такие аккаунты забыты и не обновляются, некоторые могут принадлежать ботам или злоумышленникам. Удаление и блокировка таких пользователей повышает безопасность и упрощает управление сайтом.
Кроме того, удаление неактивных аккаунтов помогает лучше сегментировать активную аудиторию и корректно строить аналитику.
Использование плагинов для удаления неактивных пользователей WordPress
Плагин Inactive User Deleter
Один из популярных плагинов для автоматического удаления неактивных пользователей — Inactive User Deleter. Он позволяет настроить период неактивности, после которого пользователь будет удалён из базы.
Преимущества:
- Гибкая настройка срока неактивности;
- Исключение определённых ролей и пользователей;
- Журнал удалённых аккаунтов;
- Автоматическая или ручная очистка.
Настройка плагина проста, он подходит для большинства сайтов без необходимости писать код.
Пример настройки Inactive User Deleter
В админке WordPress перейдите в настройки плагина и укажите, например, что пользователи без входа более 180 дней будут удалены автоматически. Можно исключить администраторов и редакторов, чтобы избежать случайного удаления.
Кастомный код для удаления неактивных пользователей по дате последнего входа
Если вы хотите более тонко контролировать процесс, можно использовать собственный код. WordPress хранит дату последнего входа пользователя в метаполе last_login (если вы его добавите) или же можно использовать сторонние плагины для фиксирования последнего логина, например, WP Login History.
Ниже пример функции, которая удалит пользователей, не заходивших на сайт более 180 дней. Для корректной работы необходимо, чтобы при каждом входе пользователя обновлялось метаполе wp_kurs_last_login:
add_action('wp_login', 'wpkurs_update_last_login', 10, 2);
function wpkurs_update_last_login($user_login, $user) {
update_user_meta($user->ID, 'wp_kurs_last_login', current_time('timestamp'));
}
function wpkurs_delete_inactive_users() {
$args = array(
'meta_key' => 'wp_kurs_last_login',
'meta_value' => strtotime('-180 days'),
'meta_compare' => '<=',
'fields' => 'ID',
'exclude' => array(1), // исключаем администратора с ID 1
'role__not_in' => array('administrator'),
);
$user_query = new WP_User_Query($args);
$users_to_delete = $user_query->get_results();
foreach ($users_to_delete as $user_id) {
require_once(ABSPATH . 'wp-admin/includes/user.php');
wp_delete_user($user_id);
}
}
// Запускаем функцию через WP-Cron раз в неделю
if (!wp_next_scheduled('wpkurs_delete_inactive_users_hook')) {
wp_schedule_event(time(), 'weekly', 'wpkurs_delete_inactive_users_hook');
}
add_action('wpkurs_delete_inactive_users_hook', 'wpkurs_delete_inactive_users');Этот код добавляет обновление времени последнего логина при входе пользователя и еженедельное удаление пользователей, которые не заходили на сайт более 180 дней. Исключены администраторы.
Как заблокировать неактивных пользователей без удаления
Иногда удалять пользователей нежелательно, например, если вы хотите сохранить их данные. В таких случаях лучше заблокировать аккаунт, отключив возможность входа.
Для блокировки можно использовать метаполе, которое проверяется на этапе авторизации. Пример функции ниже:
function wpkurs_block_inactive_user_auth($user, $username, $password) {
if (is_wp_error($user)) {
return $user;
}
$blocked = get_user_meta($user->ID, 'wp_kurs_blocked', true);
if ($blocked) {
return new WP_Error('authentication_failed', __('Ваш аккаунт заблокирован администрацией.'));
}
return $user;
}
add_filter('authenticate', 'wpkurs_block_inactive_user_auth', 30, 3);
function wpkurs_mark_inactive_users_blocked() {
$args = array(
'meta_key' => 'wp_kurs_last_login',
'meta_value' => strtotime('-180 days'),
'meta_compare' => '<=',
'fields' => 'ID',
'role__not_in' => array('administrator'),
);
$user_query = new WP_User_Query($args);
$users_to_block = $user_query->get_results();
foreach ($users_to_block as $user_id) {
update_user_meta($user_id, 'wp_kurs_blocked', 1);
}
}
// Можно запускать вручную или через WP-Cron
add_action('wpkurs_block_inactive_users_hook', 'wpkurs_mark_inactive_users_blocked');Данная реализация блокирует вход для пользователей, у которых прошло более 180 дней с момента последнего логина. При необходимости можно добавить уведомление пользователю или администратору.
Рекомендации по безопасности и удобству
Перед массовым удалением или блокировкой пользователей обязательно сделайте резервную копию базы данных. Это позволит восстановить данные при ошибках.
Также продумайте уведомления пользователям. Например, перед удалением отправляйте email с предупреждением о предстоящем удалении аккаунта из-за неактивности.
Для рассылок и уведомлений можно использовать плагин Expert Review или стандартные возможности WordPress.
Выводы
Удаление и блокировка неактивных пользователей на WordPress — задача, которую можно решить как с помощью готовых плагинов, так и через кастомный код. Основные шаги:
- Отслеживание даты последнего входа;
- Автоматизация удаления или блокировки;
- Уведомление пользователей;
- Обеспечение безопасности и резервное копирование.
Используйте плагин Inactive User Deleter для простого решения или внедряйте кастомные скрипты для гибкой настройки.