В WordPress иногда возникает необходимость автоматически удалять пользователей с определёнными ролями или статусами, например, пользователей, которые давно не активны и имеют роль, предназначенную для ограниченного доступа — в нашем случае условно назовём такую роль "черезашищенный". В этой статье мы подробно рассмотрим, как реализовать автоматическое удаление таких пользователей на примере пользовательской роли и настроек, а также как избежать ошибок и сохранить безопасность сайта.
Почему важно автоматизировать удаление черезашищенных пользователей
В крупных проектах с большим количеством пользователей регулярно накапливаются устаревшие учётные записи, которые уже не используются, но занимают место в базе данных и могут представлять риск безопасности. В частности, если у пользователя есть роль с ограниченным доступом (например, «черезашищенный» — роль с минимальными правами для временного доступа), то после истечения срока действия эта учётная запись должна быть удалена.
Ручное удаление таких пользователей неудобно и требует постоянного контроля. Автоматизация этого процесса помогает:
- Сократить нагрузку на базу данных;
- Уменьшить риски безопасности, связанные с неактивными аккаунтами;
- Сэкономить время администратора;
- Поддерживать порядок и актуальность учётных записей.
Как определить «старого» черезашищенного пользователя
Для начала нужно определить критерии, по которым пользователь считается «старым». Обычно это время последнего входа или дата регистрации. К сожалению, WordPress по умолчанию не хранит дату последнего логина, но мы можем использовать плагин или добавить код для её фиксации.
Добавление даты последнего входа
Добавим код, который будет сохранять мета-данные с датой последнего входа пользователя:
function wpupdate_update_last_login($login, $user) {
update_user_meta($user->ID, 'wpupdate_last_login', current_time('timestamp'));
}
add_action('wp_login', 'wpupdate_update_last_login', 10, 2);Этот код добавляет мета-поле wpupdate_last_login с UNIX-временем последнего входа.
Критерий устаревания
Допустим, мы считаем пользователя устаревшим, если он не входил в систему более 180 дней (6 месяцев). Можно настроить это значение по своему усмотрению.
Автоматическое удаление черезашищенных пользователей
Создадим функцию, которая будет находить пользователей с ролью cheresashishenny (условное имя роли) и датой последнего входа старше 180 дней, и удалять их из базы данных.
function wpupdate_delete_old_cheresashishenny_users() {
$threshold = strtotime('-180 days');
$args = array(
'role' => 'cheresashishenny',
'meta_query' => array(
array(
'key' => 'wpupdate_last_login',
'value' => $threshold,
'compare' => '<',
'type' => 'NUMERIC'
)
),
'fields' => 'ID',
'number' => 100
);
$user_query = new WP_User_Query($args);
if (!empty($user_query->results)) {
foreach ($user_query->results as $user_id) {
wp_delete_user($user_id);
}
}
}Этот код ищет до 100 пользователей с ролью cheresashishenny, которые не заходили в систему более 180 дней, и удаляет их.
Организация периодического запуска
Чтобы автоматизировать процесс, зарегистрируем событие WP-Cron, которое будет запускать функцию ежедневно.
function wpupdate_schedule_user_cleanup() {
if (!wp_next_scheduled('wpupdate_daily_user_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpupdate_daily_user_cleanup');
}
}
add_action('wp', 'wpupdate_schedule_user_cleanup');
add_action('wpupdate_daily_user_cleanup', 'wpupdate_delete_old_cheresashishenny_users');Таким образом, функция удаления будет запускаться каждый день автоматически.
Рекомендации по безопасности и тестированию
Перед внедрением автоматического удаления пользователей обязательно сделайте резервную копию базы данных. Можно добавить логирование удалённых пользователей, чтобы отслеживать процесс:
function wpupdate_delete_old_cheresashishenny_users() {
$threshold = strtotime('-180 days');
$args = array(
'role' => 'cheresashishenny',
'meta_query' => array(
array(
'key' => 'wpupdate_last_login',
'value' => $threshold,
'compare' => '<',
'type' => 'NUMERIC'
)
),
'fields' => 'ID',
'number' => 100
);
$user_query = new WP_User_Query($args);
if (!empty($user_query->results)) {
foreach ($user_query->results as $user_id) {
error_log('wpupdate: удалён пользователь ID ' . $user_id);
wp_delete_user($user_id);
}
}
}Можно также сначала запускать функцию в режиме теста — без удаления, а просто выводить список пользователей, чтобы убедиться, что выборка корректна.
Плагины для управления пользователями и автоматизацией
Если хочется обойтись без кода, существуют плагины, которые помогают управлять неактивными пользователями и автоматизировать очистку:
- Inactive User Deleter — позволяет задавать правила удаления неактивных учётных записей;
- Clearfy Pro — комплексный плагин для оптимизации и безопасности, с функциями управления пользователями;
- WPRemark — удобный плагин для управления пользовательскими данными и мета-полями.
Но собственный код всегда даёт больше контроля и гибкости, особенно если у вас нестандартные роли или условия удаления.
Подведение итогов по автоматическому удалению пользователей в WordPress
Автоматизация удаления черезашищенных пользователей — важный шаг к поддержанию безопасности и порядка на сайте. С помощью простых хуков и WP-Cron можно настроить регулярное удаление устаревших пользователей с минимальными усилиями. Обязательно тестируйте и создавайте резервные копии перед активацией автоматических процессов.
Если нужно более продвинутое управление, рассмотрите использование плагинов из экосистемы WPSHOP, которые помогут упростить задачи оптимизации и безопасности.