В крупных и средних проектах на WordPress часто возникает необходимость автоматически удалять пользователей, которые давно не заходили на сайт. Это помогает поддерживать базу данных в актуальном состоянии, уменьшать нагрузку и повышать безопасность, исключая забытые аккаунты.
Почему стоит удалять неактивных пользователей
Удаление неактивных пользователей помогает решить сразу несколько задач:
- Оптимизация базы данных и ускорение запросов к ней.
- Повышение безопасности, так как неиспользуемые аккаунты могут быть взломаны.
- Улучшение управления пользователями и упрощение администрирования.
Однако делать это рекомендуется с осторожностью, чтобы не удалить активных пользователей по ошибке. В статье рассмотрим, как правильно отслеживать последний логин и реализовать удаление.
Как хранить дату последнего входа пользователя в WordPress
По умолчанию WordPress не сохраняет дату последнего входа пользователя. Для этого нужно самостоятельно добавить обработчик и сохранить дату в метаданные пользователя.
Добавим функцию wpdeveloper_save_last_login, которая будет запускаться при успешной авторизации и записывать текущую дату:
function wpdeveloper_save_last_login( $user_login, $user ) {
update_user_meta( $user->ID, 'wpdeveloper_last_login', current_time( 'mysql' ) );
}
add_action( 'wp_login', 'wpdeveloper_save_last_login', 10, 2 );
Теперь при каждом входе пользователя в базу данных будет записываться дата в метаполе wpdeveloper_last_login.
Поиск и удаление неактивных пользователей по дате последнего входа
Чтобы удалить пользователей, которые не заходили, например, более 180 дней, нужно выполнить выборку по метаполю wpdeveloper_last_login и сравнить с датой 180 дней назад.
Пример функции wpdeveloper_delete_inactive_users для удаления таких пользователей:
function wpdeveloper_delete_inactive_users( $days = 180 ) {
$date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );
$args = [
'meta_key' => 'wpdeveloper_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'fields' => 'ID',
'number' => 100,
];
$user_query = new WP_User_Query( $args );
$users_to_delete = $user_query->get_results();
if ( empty( $users_to_delete ) ) {
return 0;
}
$deleted_count = 0;
foreach ( $users_to_delete as $user_id ) {
require_once ABSPATH . 'wp-admin/includes/user.php';
if ( wp_delete_user( $user_id ) ) {
$deleted_count++;
}
}
return $deleted_count;
}
Эту функцию можно запускать вручную или с помощью WP-Cron для регулярной очистки.
Регулярное удаление через WP-Cron
Добавим задачу планировщика, которая будет вызывать удаление раз в неделю:
function wpdeveloper_schedule_user_cleanup() {
if ( ! wp_next_scheduled( 'wpdeveloper_weekly_user_cleanup' ) ) {
wp_schedule_event( time(), 'weekly', 'wpdeveloper_weekly_user_cleanup' );
}
}
add_action( 'wp', 'wpdeveloper_schedule_user_cleanup' );
function wpdeveloper_do_user_cleanup() {
$deleted = wpdeveloper_delete_inactive_users( 180 );
if ( $deleted > 0 ) {
error_log( "[WPDeveloper] Deleted {$deleted} inactive users" );
}
}
add_action( 'wpdeveloper_weekly_user_cleanup', 'wpdeveloper_do_user_cleanup' );
Теперь раз в неделю будут удаляться все пользователи с последним входом более 180 дней назад.
Дополнительные меры предосторожности при удалении пользователей
Удаление пользователей — критичная операция, поэтому следует учитывать несколько моментов:
- Не удаляйте администраторов и ключевых пользователей сайта. Для этого можно добавить проверку роли перед удалением.
- Перед удалением можно отправлять уведомление пользователям с предупреждением о предстоящем удалении.
- Рекомендуется делать резервную копию базы перед массовым удалением.
- Проверять, что пользователь не является автором важных публикаций, либо переназначать их другому пользователю.
Пример проверки роли администратора перед удалением:
foreach ( $users_to_delete as $user_id ) {
$user = get_userdata( $user_id );
if ( in_array( 'administrator', (array) $user->roles ) ) {
continue; // пропускаем админов
}
wp_delete_user( $user_id );
}
Плагины для управления неактивными пользователями
Если не хочется писать код, можно использовать готовые плагины с похожей функциональностью:
- Inactive User Deleter — позволяет настроить удаление по времени без входа.
- WP Bulk Delete — универсальный инструмент для массового удаления по разным условиям, в том числе по дате последнего входа.
- Clearfy Pro с настройками безопасности и очистки базы — можно интегрировать с вашим процессом.
При использовании плагинов обычно достаточно настроить период неактивности и запустить автоматическую очистку.
Выводы и рекомендации
Автоматическое удаление неактивных пользователей — полезная и востребованная задача для многих сайтов на WordPress. Правильное отслеживание даты последнего логина и регулярное удаление позволяют поддерживать базу в порядке и повышать безопасность.
Рекомендуется внедрять такую систему с учетом ролей пользователей и уведомлений, чтобы не потерять нужных людей. Для автоматизации удобно использовать WP-Cron и писать собственные функции, как показано выше, либо использовать проверенные плагины.
Для удобства управления пользователями и автоматизации можете рассмотреть плагин Clearfy Pro, который расширяет возможности безопасности и оптимизации WordPress.