В некоторых проектах на WordPress возникает необходимость удалять пользователей, которые давно не заходили в систему. Это помогает поддерживать базу данных в актуальном состоянии, освобождать место и повышать безопасность сайта. В этой статье мы рассмотрим, как реализовать автоматическое удаление неактивных пользователей по времени без использования плагинов, а также предложим пример кода и варианты настройки.
Почему важно удалять неактивных пользователей
Пользователи, которые долго не посещали сайт, могут быть потенциальной угрозой безопасности, если их аккаунты взломают. Кроме того, большое количество неактивных записей замедляет работу базы данных и увеличивает размер резервных копий. Автоматизация удаления таких аккаунтов избавляет администратора от рутинной работы и делает сайт чище.
При этом важно грамотно определить критерии «неактивности», чтобы не удалить случайно полезных пользователей.
Как определить неактивных пользователей в WordPress
Стандартный способ — смотреть на поле user_last_login. Однако в базе данных WordPress по умолчанию такого поля нет. Чтобы отслеживать дату последнего входа, нужно добавить соответствующую логику.
Для этого можно использовать хук wp_login, чтобы при каждом входе пользователя обновлять мета-данные с датой последнего посещения:
function wpabout_update_last_login($user_login, $user) {
update_user_meta($user->ID, 'wpabout_last_login', current_time('mysql'));
}
add_action('wp_login', 'wpabout_update_last_login', 10, 2);Так мы сохраняем дату последнего входа в пользовательские мета-данные. Дальше по этому полю можно фильтровать неактивных.
Реализация удаления неактивных пользователей по времени
Далее нам нужно написать функцию, которая будет искать пользователей, у которых дата последнего входа старше заданного срока (например, 180 дней), и удалять их.
Пример функции для удаления таких пользователей:
function wpabout_delete_inactive_users() {
$days_inactive = 180; // Кол-во дней неактивности
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days', current_time('timestamp')));
$args = array(
'meta_key' => 'wpabout_last_login',
'meta_value' => $date_threshold,
'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) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user($user_id);
}
}Эта функция ищет всех пользователей, у которых wpabout_last_login раньше даты порога, и удаляет их.
Особенности реализации и безопасность
Обратите внимание, что функция удаляет пользователей без уведомления! Поэтому рекомендуем:
- Перед запуском делать резервную копию базы данных.
- Исключать из удаления пользователей с особыми ролями (например, администраторов).
- Проводить удаление не чаще, чем раз в сутки, чтобы не создавать нагрузку.
Для исключения администраторов можно добавить условие в запрос:
$args['role__not_in'] = array('Administrator');Автоматизация через WP-Cron
Чтобы функция выполнялась автоматически, создадим задачу WP-Cron, которая будет запускать удаление, например, раз в сутки.
Добавим регистрацию события при инициализации:
function wpabout_schedule_user_cleanup() {
if (!wp_next_scheduled('wpabout_daily_user_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpabout_daily_user_cleanup');
}
}
add_action('wp', 'wpabout_schedule_user_cleanup');
add_action('wpabout_daily_user_cleanup', 'wpabout_delete_inactive_users');Теперь WordPress будет автоматически запускать функцию удаления каждый день.
Проверка и отладка
Для отладки рекомендуется сначала не удалять пользователей, а выводить список подходящих под критерии:
function wpabout_list_inactive_users() {
$days_inactive = 180;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days', current_time('timestamp')));
$args = array(
'meta_key' => 'wpabout_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'fields' => 'all_with_meta',
'number' => -1
);
$user_query = new WP_User_Query($args);
$users = $user_query->get_results();
foreach ($users as $user) {
echo 'ID: ' . $user->ID . ' Login: ' . $user->user_login . ' Last login: ' . get_user_meta($user->ID, 'wpabout_last_login', true) . "<br>";
}
}Включите эту функцию временно для просмотра списка и убедитесь, что удалятся только нужные пользователи.
Альтернативные решения через плагины
Если не хотите писать код, можно использовать готовые плагины для очистки неактивных пользователей. Например:
- Inactive User Deleter — позволяет удалять пользователей по времени неактивности с гибкими настройками.
- Clearfy Pro — оптимизирует сайт и содержит инструменты управления пользователями, в том числе очистку неактивных аккаунтов.
Итоговые рекомендации
Автоматическое удаление неактивных пользователей — полезная практика для поддержания безопасности и производительности WordPress-сайта. Реализовать это можно и без плагинов, добавив небольшой код, отслеживающий дату последнего входа и запускающий удаление. Также не забывайте делать резервные копии и проверять работу скрипта на тестовых пользователях.
Для удобства и расширенной функциональности рассмотрите проверку решений на Clearfy Pro, который активно помогает с оптимизацией и безопасностью WordPress.