Почему важно удалять неактивных пользователей WordPress
Ведение сайта на WordPress с регистрацией пользователей – это удобный способ взаимодействия с аудиторией. Однако с течением времени на сайте может накопиться большое количество неактивных аккаунтов. Они занимают место в базе данных, создают потенциальные уязвимости и могут ухудшать производительность сайта.
Автоматическое удаление пользователей, которые не заходили на сайт более 30 дней, поможет поддерживать базу пользователей в актуальном состоянии, улучшить безопасность и оптимизировать работу сайта.
В этой статье мы рассмотрим, как реализовать такую функцию с помощью собственного кода и обсудим, какие плагины помогут упростить задачу.
Как определить неактивного пользователя: критерии и способы
Для автоматического удаления необходимо четко определить, кто считается неактивным пользователем. Обычно используют следующие критерии:
- Дата последнего входа – если пользователь не заходил на сайт более 30 дней.
- Дата регистрации – если пользователь зарегистрировался, но никогда не входил.
- Роль пользователя – можно исключить администраторов или редакторов из удаления.
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 с текущей датой и временем при каждом входе пользователя.
Создание функции для удаления неактивных пользователей
Теперь напишем функцию, которая будет искать пользователей, не заходивших больше 30 дней, и удалять их. Исключим из удаления администраторов.
function wpinfo_delete_inactive_users() {
$args = array(
'meta_key' => 'wpinfo_last_login',
'meta_value' => date('Y-m-d H:i:s', strtotime('-30 days')),
'meta_compare' => '<',
'role__not_in' => array('administrator'),
'fields' => 'ID'
);
$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 ) {
wp_delete_user( $user_id );
}
}
}Эта функция находит пользователей с датой последнего входа раньше 30 дней назад и удаляет их, кроме администраторов.
Обработка пользователей без даты входа
Если пользователь никогда не входил, метаданные wpinfo_last_login будут отсутствовать. Можно добавить дополнительный запрос для удаления таких пользователей, если они зарегистрированы более 30 дней назад:
function wpinfo_delete_never_logged_in_users() {
global $wpdb;
$date_threshold = date('Y-m-d H:i:s', strtotime('-30 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, 'wpinfo_last_login', true);
$user = get_userdata($user_id);
if (empty($last_login) && !in_array('administrator', $user->roles)) {
wp_delete_user($user_id);
}
}
}Автоматизация удаления через WP-Cron
Чтобы удалять пользователей регулярно, добавим задачу в WP-Cron, которая будет запускать удаление раз в сутки.
function wpinfo_schedule_user_cleanup() {
if ( ! wp_next_scheduled( 'wpinfo_daily_user_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpinfo_daily_user_cleanup' );
}
}
add_action( 'wp', 'wpinfo_schedule_user_cleanup' );
add_action( 'wpinfo_daily_user_cleanup', 'wpinfo_delete_inactive_users' );
add_action( 'wpinfo_daily_user_cleanup', 'wpinfo_delete_never_logged_in_users' );Этот код регистрирует ежедневное событие, вызывающее функции удаления неактивных и никогда не заходивших пользователей.
Обзор плагинов для удаления неактивных пользователей
Если вы предпочитаете готовые решения, рассмотрите плагины, которые автоматизируют управление неактивными пользователями:
- Inactive User Deleter — позволяет настроить удаление пользователей по времени без кастомного кода.
- Clearfy Pro — комплексный плагин для оптимизации WordPress, включая функции управления пользователями.
Преимущество собственного кода — гибкость и возможность тонкой настройки под конкретный проект. Плагины же экономят время и подходят для большинства сайтов.
Как обеспечить безопасность и избежать случайного удаления
Удаление пользователей — операция, требующая осторожности. Рекомендуется:
- Исключать из удаления пользователей с важными ролями (администраторы, редакторы).
- Делать резервные копии базы данных перед настройкой автоматического удаления.
- Тестировать функции на тестовом сайте, чтобы убедиться в корректности работы.
Также можно добавить уведомления администратору перед удалением или отправлять письмо пользователю с предупреждением.
Пример уведомления перед удалением
function wpinfo_notify_inactive_users() {
$args = array(
'meta_key' => 'wpinfo_last_login',
'meta_value' => date('Y-m-d H:i:s', strtotime('-27 days')),
'meta_compare' => '<',
'role__not_in' => array('administrator'),
'fields' => 'ID'
);
$user_query = new WP_User_Query( $args );
$users = $user_query->get_results();
foreach ($users as $user_id) {
$user = get_userdata($user_id);
wp_mail($user->user_email, 'Ваш аккаунт будет удален', 'Вы не заходили на сайт 27 дней. Через 3 дня аккаунт будет удален.');
}
}
add_action('wpinfo_daily_user_cleanup', 'wpinfo_notify_inactive_users', 5);Этот код отправляет уведомления за 3 дня до удаления.
Итоги и рекомендации
Автоматическое удаление забытых пользователей в WordPress — важная задача для поддержания чистоты базы данных и безопасности сайта. Используя приведенные функции и советы, вы сможете настроить надежный механизм очистки.
Если хотите упростить задачу, воспользуйтесь плагинами, например, Clearfy Pro, который обладает широким функционалом для оптимизации WordPress.
Регулярно проверяйте работу скриптов и создавайте резервные копии — это поможет избежать потери данных и обеспечит стабильность вашего сайта.