В процессе развития сайта на WordPress со временем накапливается множество пользователей, которые давно не заходили или не проявляют активности. Это может негативно сказаться на безопасности и производительности сайта, а также усложнить управление пользователями. В этой статье мы подробно рассмотрим, как удалить неактивных пользователей WordPress с помощью кода и плагинов, а также автоматизировать этот процесс.
Почему важно удалять неактивных пользователей
Наличие неактивных пользователей создает несколько проблем:
- Безопасность: неактивные учётные записи могут стать точками взлома, особенно если пароль устарел или скомпрометирован.
- Производительность: большое количество пользователей увеличивает нагрузку на базу данных, что может замедлять работу сайта.
- Управление: сложно ориентироваться в списке пользователей, если там много неактивных или фейковых аккаунтов.
Регулярная чистка пользователей помогает поддерживать сайт в порядке и повышать его безопасность.
Как определить неактивных пользователей в WordPress
Под неактивными пользователями обычно понимают тех, кто не заходил на сайт длительное время. Для этого в WordPress можно использовать дату последнего входа, хранящуюся в мета-данных пользователя, либо дату регистрации, если данных о входах нет.
По умолчанию WordPress не хранит дату последнего входа, поэтому сначала нужно реализовать её запись.
Добавление записи даты последнего входа пользователя
Для хранения даты последнего входа добавим функцию, которая будет записывать мета-данные при каждом успешном входе:
function wpurok_update_last_login( $user_login, $user ) {
update_user_meta( $user->ID, 'wpurok_last_login', current_time('mysql') );
}
add_action( 'wp_login', 'wpurok_update_last_login', 10, 2 );Эта функция срабатывает при входе пользователя и сохраняет текущую дату и время в мета-данных пользователя с ключом wpurok_last_login.
Удаление неактивных пользователей по времени последнего входа
Теперь, когда у нас есть данные о последнем входе, можно написать функцию, которая удалит пользователей, неактивных, например, более 180 дней.
Пример кода для удаления неактивных пользователей
function wpurok_delete_inactive_users( $days = 180 ) {
$args = array(
'meta_key' => 'wpurok_last_login',
'meta_value' => date('Y-m-d H:i:s', strtotime('-' . $days . ' days')),
'meta_compare' => '<=',
'fields' => 'ID',
'number' => -1
);
$user_query = new WP_User_Query( $args );
$users_to_delete = $user_query->get_results();
if ( !empty($users_to_delete) ) {
foreach ( $users_to_delete as $user_id ) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user( $user_id );
}
}
}Вызов wpurok_delete_inactive_users() удалит всех пользователей, у которых дата последнего входа старше 180 дней.
Учтите, что эта операция необратима, поэтому рекомендуется делать резервную копию базы перед запуском.
Удаление пользователей без даты входа (новых или неактивных)
Пользователи, которые никогда не входили, не будут иметь мета-данных wpurok_last_login. Можно дополнительно удалить пользователей, зарегистрированных давно, но так и не активировавшихся.
function wpurok_delete_never_logged_in_users( $days = 180 ) {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$user_ids = $wpdb->get_col( $wpdb->prepare(
"SELECT ID FROM $wpdb->users WHERE user_registered <= %s",
$date_threshold
) );
foreach ( $user_ids as $user_id ) {
$last_login = get_user_meta( $user_id, 'wpurok_last_login', true );
if ( empty( $last_login ) ) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user( $user_id );
}
}
}Эта функция удалит пользователей, которые зарегистрировались более 180 дней назад и никогда не входили в систему.
Автоматизация удаления с помощью WP-Cron
Чтобы не запускать вручную, можно настроить автоматическое удаление через WP-Cron.
function wpurok_schedule_user_cleanup() {
if ( ! wp_next_scheduled( 'wpurok_daily_user_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpurok_daily_user_cleanup' );
}
}
add_action( 'wp', 'wpurok_schedule_user_cleanup' );
function wpurok_handle_user_cleanup() {
wpurok_delete_inactive_users();
wpurok_delete_never_logged_in_users();
}
add_action( 'wpurok_daily_user_cleanup', 'wpurok_handle_user_cleanup' );Этот код настроит ежедневный запуск удаления неактивных пользователей.
Использование плагинов для управления неактивными пользователями
Если вы предпочитаете готовые решения, можно использовать плагины:
- User Cleanup – позволяет находить и удалять пользователей по разным критериям, включая дату последнего входа.
- Inactive User Deleter – автоматизирует удаление неактивных пользователей с гибкими настройками.
- Clearfy Pro – многофункциональный плагин для оптимизации и безопасности WordPress, включая управление пользователями.
Для установки плагина можно перейти на User Cleanup на WPSHOP и ознакомиться с подробностями.
Рекомендации и меры предосторожности
Перед удалением пользователей обязательно сделайте резервную копию базы данных. Также рекомендуем:
- Оповещать пользователей по email о предстоящем удалении аккаунта из-за неактивности.
- Исключать из удаления администраторов и важных ролей.
- Тестировать скрипты на тестовом сайте перед применением на боевом.
Для исключения администраторов из удаления можно добавить проверку ролей в функцию удаления:
if ( in_array( 'administrator', (array) get_userdata( $user_id )->roles ) ) {
continue; // Не удалять админов
}