Управление пользователями — одна из важных задач для администраторов WordPress-сайтов. Особенно, если на вашем сайте зарегистрировано много пользователей, часть из которых давно неактивна. Накопление неактивных аккаунтов может привести к рискам безопасности и утрате актуальности базы данных. В этой статье мы разберём, как настроить автоматическое удаление неактивных пользователей WordPress с помощью кода и плагинов, а также рассмотрим практические примеры и советы.
Почему важно удалять неактивных пользователей WordPress
Неактивные пользователи — это аккаунты, которые не заходили на сайт длительное время (например, несколько месяцев или лет). Они могут создавать несколько проблем:
- Безопасность: старые аккаунты часто имеют устаревшие пароли, что повышает риск взлома.
- Нагрузка на базу данных: большое число пользователей замедляет запросы и операции с базой.
- Управление пользователями: сложнее ориентироваться в списке пользователей, если в нем много неактивных.
Автоматизация удаления помогает поддерживать сайт в порядке без ручного контроля.
Как определить неактивных пользователей
Чтобы автоматически удалять неактивных пользователей, сначала нужно определить критерии неактивности. Обычно используют следующие параметры:
- Дата последнего входа: самый точный способ, но WordPress по умолчанию не хранит дату последнего входа.
- Дата регистрации пользователя: можно удалить пользователей, которые не заходили и не обновляли профиль с момента регистрации.
Для отслеживания последнего входа рекомендуем использовать плагин или кастомный код, который добавляет мета-данные с датой логина.
Добавляем дату последнего входа пользователя
Пример функции, которая сохраняет дату последнего входа в мета-поле пользователя:
function wpinfo_update_last_login( $login, $user ) {
update_user_meta( $user->ID, 'wpinfo_last_login', current_time('mysql') );
}
add_action( 'wp_login', 'wpinfo_update_last_login', 10, 2 );
Эта функция добавляет или обновляет мета-ключ wpinfo_last_login с текущей датой при входе пользователя. Благодаря этому можно проверять, когда пользователь последний раз заходил.
Автоматическое удаление неактивных пользователей с помощью кода
Далее рассмотрим пример функции, которая удаляет пользователей, которые не заходили более 180 дней.
function wpinfo_delete_inactive_users() {
$args = array(
'meta_key' > 'wpinfo_last_login',
'meta_value' > date('Y-m-d H:i:s', strtotime('-180 days')),
'meta_compare' > '<',
'fields' > 'ID',
'number' > 1000,
);
$user_query = new WP_User_Query( $args );
$users = $user_query->get_results();
if ( !empty($users) ) {
foreach ( $users as $user_id ) {
wp_delete_user( $user_id );
}
}
}
// Запускаем функцию по крону, например, раз в неделю
if ( ! wp_next_scheduled( 'wpinfo_weekly_delete_inactive_users' ) ) {
wp_schedule_event( time(), 'weekly', 'wpinfo_weekly_delete_inactive_users' );
}
add_action( 'wpinfo_weekly_delete_inactive_users', 'wpinfo_delete_inactive_users' );
Этот код ищет пользователей с датой последнего входа более 180 дней назад и удаляет их. Запуск происходит еженедельно с помощью WP Cron.
Важные моменты при удалении пользователей
- Не удаляйте администраторов и других ключевых пользователей. Можно добавить фильтр по ролям.
- Резервное копирование базы перед массовым удалением обязательно.
- Сообщайте пользователям о возможном удалении, например, через email-рассылку.
Плагины для удаления неактивных пользователей в WordPress
Если вы предпочитаете готовые решения, рассмотрите плагины с функцией удаления неактивных пользователей:
- Inactive User Deleter — позволяет настроить период неактивности и автоматически удаляет таких пользователей.
- User Cleanup — удаляет неактивных пользователей по дате регистрации и последнему входу.
- Clearfy Pro — расширенный плагин для оптимизации и безопасности сайта, включая управление пользователями и автоматизацию удаления.
Плагины предлагают удобный интерфейс и дополнительные настройки, но не всегда гибко подходят под индивидуальные задачи. Комбинация с кастомным кодом — оптимальное решение.
Как исключить определённые роли и пользователей из удаления
Чтобы не удалять администраторов и редакторов, измените функцию следующим образом:
function wpinfo_delete_inactive_users() {
$args = array(
'meta_key' => 'wpinfo_last_login',
'meta_value' => date('Y-m-d H:i:s', strtotime('-180 days')),
'meta_compare' => '<',
'fields' => 'ID',
'number' => 1000,
'role__not_in' => array('administrator', 'editor'),
);
$user_query = new WP_User_Query( $args );
$users = $user_query->get_results();
if ( !empty($users) ) {
foreach ( $users as $user_id ) {
wp_delete_user( $user_id );
}
}
}
Параметр role__not_in исключает указанные роли из выборки. Это важный шаг для сохранения важных аккаунтов.
Советы по тестированию и безопасности
Перед внедрением автоматического удаления:
- Создайте резервную копию сайта и базы данных.
- Тестируйте функции на тестовом сайте или локально.
- Добавьте логирование удалений, чтобы отслеживать, какие пользователи были удалены.
- Реализуйте уведомления для администраторов о результатах работы скрипта.
Пример логирования удалённых пользователей
function wpinfo_delete_inactive_users() {
$args = array(
'meta_key' => 'wpinfo_last_login',
'meta_value' => date('Y-m-d H:i:s', strtotime('-180 days')),
'meta_compare' => '<',
'fields' => 'ID',
'number' => 1000,
'role__not_in' => array('administrator', 'editor'),
);
$user_query = new WP_User_Query( $args );
$users = $user_query->get_results();
if ( !empty($users) ) {
foreach ( $users as $user_id ) {
$user = get_userdata( $user_id );
error_log( 'Удалён неактивный пользователь: ' . $user->user_login . ' (ID ' . $user_id . ')' );
wp_delete_user( $user_id );
}
}
}
Логи появятся в файле debug.log при включённом WP_DEBUG_LOG.