Ведение пользовательской базы сайта на WordPress — важная задача, особенно когда речь идет о больших сообществах. Неактивные пользователи могут занимать ресурсы и создавать нагрузку, а также затруднять аналитику и управление сайтом. В этой статье мы разберем, как автоматически удалять неактивных пользователей WordPress, используя как готовые плагины, так и собственные решения через код.
Почему важно удалять неактивных пользователей WordPress
Неактивные пользователи — это учетные записи, которые долгое время не входили в систему и не проявляли активности. Их наличие может привести к нескольким проблемам:
- Повышенная нагрузка на базу данных и сервер.
- Увеличенный риск безопасности — заброшенные аккаунты могут быть скомпрометированы.
- Завышенная статистика пользователей, что искажает аналитику.
- Сложности в управлении и коммуникациях с аудиторией.
Удаление таких пользователей помогает поддерживать чистоту базы, улучшать производительность и безопасность сайта.
Проверка активности пользователя: какие критерии использовать
Для определения неактивных пользователей нужно выбрать подходящие критерии. Обычно используются:
- Дата последнего входа (login). Если пользователь не заходил на сайт, например, более 6 месяцев — его можно считать неактивным.
- Дата последней публикации или комментария (если сайт ориентирован на активность).
- Дата обновления профиля или других действий.
В WordPress по умолчанию не хранится дата последнего входа пользователя, поэтому для ее отслеживания потребуется дополнительный код или плагин.
Отслеживание даты последнего входа пользователя
Для начала добавим фиксирование даты входа пользователя с помощью хука wp_login. Вот пример функции с префиксом wpbit_:
function wpbit_record_last_login($user_login, $user) {
update_user_meta($user->ID, 'wpbit_last_login', current_time('mysql'));
}
add_action('wp_login', 'wpbit_record_last_login', 10, 2);
Эта функция сохраняет текущую дату и время последнего входа в мета-поле пользователя wpbit_last_login.
Автоматическое удаление неактивных пользователей с помощью кода
Теперь, когда у нас есть дата последнего входа, можно написать функцию, которая будет удалять пользователей, не заходивших на сайт более определенного периода. Например, 180 дней.
function wpbit_delete_inactive_users() {
$days_inactive = 180;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));
$args = array(
'meta_key' => 'wpbit_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'fields' => 'ID',
'number' => 1000
);
$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);
}
}
// Запуск через WP-Cron
add_action('wpbit_daily_user_cleanup', 'wpbit_delete_inactive_users');
function wpbit_schedule_user_cleanup() {
if (!wp_next_scheduled('wpbit_daily_user_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpbit_daily_user_cleanup');
}
}
add_action('wp', 'wpbit_schedule_user_cleanup');
Этот код создает ежедневное задание, которое удаляет пользователей, у которых дата последнего входа старше 180 дней.
Настройка периодичности и безопасности удаления
Удаление пользователей — критичная операция. Рекомендуется:
- Перед удалением делать резервную копию базы данных.
- Добавить исключения для администраторов и важных ролей.
- Отправлять уведомления модераторам о планируемом удалении.
Добавим исключение для администратора:
$args['role__not_in'] = ['administrator'];
Или внутри цикла:
if (in_array('administrator', get_userdata($user_id)->roles)) {
continue; // Пропускаем администраторов
}
Готовые плагины для автоматического удаления неактивных пользователей
Если вы предпочитаете готовые решения, рассмотрите следующие плагины:
- Inactive User Deleter — позволяет настроить период неактивности и автоматическое удаление. Удобен для быстрой настройки.
- WP Sweep — инструмент для оптимизации базы данных, включая удаление неактивных пользователей.
- Clearfy Pro с функцией очистки базы и управления пользователями. Подробнее на https://wpshop.ru/plugins/clearfy-pro/.
Плагины подходят для тех, кто не хочет писать код, но важно проверять совместимость с вашей версией WordPress и другими плагинами.
Советы по тестированию и отладке
Перед запуском автоматического удаления:
- Создайте тестовую среду или резервную копию сайта.
- Проверьте корректность записи даты последнего входа пользователем.
- Запустите функцию удаления вручную, чтобы увидеть, кто попадет под удаление.
- Логируйте действия удаления для отчетности и восстановления.
Пример логирования удаления пользователей
function wpbit_delete_inactive_users() {
$days_inactive = 180;
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));
$args = array(
'meta_key' => 'wpbit_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'fields' => 'ID',
'number' => 1000,
'role__not_in' => ['administrator'],
);
$user_query = new WP_User_Query($args);
$users_to_delete = $user_query->get_results();
foreach ($users_to_delete as $user_id) {
$user_info = get_userdata($user_id);
error_log('Удаление неактивного пользователя: ' . $user_info->user_login . ' (ID: ' . $user_id . ')');
require_once(ABSPATH . 'wp-admin/includes/user.php');
wp_delete_user($user_id);
}
}
Логи можно просматривать в файле wp-content/debug.log при включенном режиме отладки.
Выводы и рекомендации
Автоматическое удаление неактивных пользователей — важный инструмент для поддержания безопасности и производительности сайта на WordPress. Используйте приведенный код с учетом особенностей вашего проекта, не забывайте про резервные копии и тестирование. Если предпочитаете плагины, обратите внимание на Clearfy Pro и другие проверенные решения.