Владельцы крупных WordPress-сайтов часто сталкиваются с проблемой накопления неактивных пользователей. Это может быть причиной снижения производительности базы данных, увеличения времени выборки и даже угроз безопасности. В этой статье мы разберём, как автоматически находить и удалять неактивных пользователей на сайте WordPress с помощью кода и плагинов.
Почему важно удалять неактивных пользователей
Неактивные пользователи — это учетные записи, которые долгое время не заходили на сайт и не проявляли активности. Их наличие приводит к нескольким проблемам:
- Загромождение базы данных. Большое количество записей в таблице пользователей ухудшает производительность запросов.
- Увеличение риска безопасности. Заброшенные аккаунты могут быть взломаны и использованы для атак.
- Сложности в администрировании. Труднее управлять реальными пользователями и сегментировать аудиторию.
Удаление таких аккаунтов помогает поддерживать систему в чистоте и безопасности.
Как определить неактивных пользователей в WordPress
Для начала нужно понять, какие пользователи считаются неактивными. Обычно это те, кто не заходил на сайт в течение определённого времени — например, 6 месяцев или 1 года. В WordPress дата последнего входа не хранится по умолчанию, поэтому для отслеживания активности нужно либо использовать плагин, либо добавить собственный механизм.
Добавление мета-поля последнего входа пользователя
Добавим код, который будет сохранять дату последнего входа пользователя в мета-данные. Это позволит в дальнейшем проводить фильтрацию.
add_action('wp_login', 'wpcontent_update_last_login', 10, 2);
function wpcontent_update_last_login($user_login, $user) {
update_user_meta($user->ID, 'wpcontent_last_login', current_time('mysql'));
}
Этот хук wp_login срабатывает при успешном входе пользователя и обновляет мета-данные wpcontent_last_login.
Автоматическое удаление неактивных пользователей с помощью собственного кода
Теперь, когда у нас есть информация о последнем входе, можно написать функцию для удаления пользователей, которые не заходили более заданного периода.
function wpcontent_delete_inactive_users($days_inactive = 180) {
$args = array(
'meta_key' => 'wpcontent_last_login',
'meta_value' => date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days')),
'meta_compare' => '<',
'fields' => 'ID',
'number' => 1000
);
$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);
}
}
}
// Пример вызова:
// wpcontent_delete_inactive_users(180); // удалит пользователей без логинов 180+ дней
Функцию можно запускать вручную или назначить на планировщик WP-Cron для автоматизации.
Настройка WP-Cron для регулярного удаления
Добавьте в файл functions.php или в плагин следующий код для еженедельного запуска удаления:
if (!wp_next_scheduled('wpcontent_weekly_delete_inactive_users')) {
wp_schedule_event(time(), 'weekly', 'wpcontent_weekly_delete_inactive_users');
}
add_action('wpcontent_weekly_delete_inactive_users', function() {
wpcontent_delete_inactive_users(180); // 180 дней неактивности
});
Теперь каждый неделю будут удаляться пользователи, которые не заходили более 6 месяцев.
Использование плагинов для удаления неактивных пользователей
Если не хотите писать код, можно использовать готовые решения:
- Inactive User Deleter — плагин, который автоматически удаляет пользователей, неактивных заданное количество дней. Умеет фильтровать по ролям.
- WP Bulk Delete — мощный инструмент для массового удаления пользователей по различным критериям, включая дату последнего входа.
- Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wpcontent.ru&utm_medium=article&utm_campaign=kak-avtomaticheski-udaljat-neaktivnye-polzovateli-v-wordpress) — помимо множества оптимизаций, содержит модуль для управления пользователями и очистки базы.
Плагины обычно имеют удобный интерфейс и позволяют избежать ошибок при работе с базой данных.
Особенности и рекомендации
Перед удалением пользователей обязательно делайте резервную копию базы данных. Также учитывайте, что некоторые пользователи могут быть важны даже если давно не заходили (например, администраторы или VIP). В коде можно добавить исключения по ролям:
function wpcontent_delete_inactive_users($days_inactive = 180) {
$args = array(
'meta_key' => 'wpcontent_last_login',
'meta_value' => date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days')),
'meta_compare' => '<',
'fields' => 'ID',
'number' => 1000,
'role__not_in' => array('administrator', 'editor')
);
$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);
}
}
}
Так вы обезопасите критичные аккаунты.
Выводы
Автоматическое удаление неактивных пользователей — важный элемент поддержки здоровья сайта на WordPress. Если реализовать отслеживание последнего входа и настроить регулярное удаление, база данных будет работать быстрее, а риск безопасности снизится. Можно использовать как собственные решения на PHP, так и популярные плагины, например, Clearfy Pro, который поможет комплексно оптимизировать сайт.