При ведении сайта на WordPress со временем накапливается большое количество пользователей, которые давно не заходили на сайт или не проявляли активности. Это может создавать нагрузку на базу данных, ухудшать безопасность и усложнять администрирование. В этой статье подробно рассмотрим, как автоматически и вручную удалять неактивных пользователей WordPress, используя как плагины, так и собственные решения на PHP.
Почему важно удалять неактивных пользователей WordPress
В первую очередь, неактивные пользователи — это потенциальная «мертвая» нагрузка на сайт. Даже если они не заходят, их учетные записи занимают место в базе данных, увеличивают количество записей в таблице пользователей и могут стать целью для взлома, если используются слабые пароли.
Удаление таких пользователей помогает:
- Уменьшить размер базы данных и повысить скорость запросов;
- Повысить безопасность за счет удаления старых, неиспользуемых аккаунтов;
- Упростить управление пользователями и аналитику;
- Снизить вероятность спама и злоупотреблений.
Для сайтов с регистрацией и сообществами это особенно актуально.
Как определить неактивных пользователей WordPress
Для начала нужно понять, как определить, что пользователь неактивен. Обычно ориентируются на дату последнего входа на сайт. В WordPress по умолчанию нет поля для хранения даты последнего логина, поэтому нужно его добавить либо использовать плагины, которые ведут такую статистику.
Добавление даты последнего входа через код
Добавим дату последнего входа в мета-поле пользователя с помощью хука wp_login. В файл functions.php вашей темы или в собственный плагин добавьте следующий код:
function wpbloger_update_last_login($user_login, $user) {
update_user_meta($user->ID, 'wpbloger_last_login', current_time('mysql'));
}
add_action('wp_login', 'wpbloger_update_last_login', 10, 2);
Теперь при каждом входе пользователя в мета-поле wpbloger_last_login будет записываться дата и время последнего логина.
Автоматическое удаление неактивных пользователей через WP-Cron
Создадим функцию, которая будет удалять пользователей, не заходивших более заданного количества дней (например, 180 дней). Добавим периодический Cron-задачу.
function wpbloger_delete_inactive_users() {
$days_inactive = 180; // Порог неактивности в днях
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));
$args = array(
'meta_key' => 'wpbloger_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'fields' => 'ID',
'exclude' => array(1), // Не удалять администратора с ID 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) {
wp_delete_user($user_id);
}
}
}
// Регистрируем Cron задачу
function wpbloger_schedule_cron() {
if (!wp_next_scheduled('wpbloger_delete_inactive_users_hook')) {
wp_schedule_event(time(), 'daily', 'wpbloger_delete_inactive_users_hook');
}
}
add_action('wp', 'wpbloger_schedule_cron');
add_action('wpbloger_delete_inactive_users_hook', 'wpbloger_delete_inactive_users');
Этот код проверяет пользователей с мета-полем даты последнего входа и удаляет тех, кто не заходил дольше 180 дней. Чтобы отключить задачу, нужно удалить событие из Cron.
Использование плагинов для удаления неактивных пользователей
Если не хочется писать код, можно воспользоваться готовыми плагинами:
- WP User Cleaner — плагин для массового удаления пользователей по дате последнего входа, роли и другим критериям. Удобен для быстрой очистки.
- Clearfy Pro — мультитул для оптимизации сайта, включает функции очистки пользователей и оптимизации базы.
Плагины предоставляют графический интерфейс для выбора условий удаления и безопасной очистки.
Ручное удаление неактивных пользователей через SQL-запросы
Для опытных пользователей можно выполнить удаление напрямую в базе данных. Но это рискованно и требует бэкапа.
DELETE FROM wp_users
WHERE ID IN (
SELECT user_id FROM wp_usermeta
WHERE meta_key = 'wpbloger_last_login'
AND meta_value < DATE_SUB(NOW(), INTERVAL 180 DAY)
);
После этого удалятся пользователи, не заходившие более 180 дней. Однако WordPress хранит данные о пользователях и в других таблицах, поэтому лучше использовать встроенные функции wp_delete_user() для корректного удаления.
Советы по безопасности при удалении пользователей
Перед удалением важно:
- Сделать резервную копию базы данных;
- Исключить из удаления администраторов и ключевых пользователей;
- Проинформировать пользователей, если это возможно (например, email-уведомление о предстоящем удалении);
- Проверить логи активности для исключения ошибочных удалений.
Итог
Удаление неактивных пользователей — важная часть поддержания здоровья сайта на WordPress. Добавление отслеживания последнего входа, использование Cron-задач или плагинов позволяет автоматизировать процесс и поддерживать базу в чистоте. Используйте приведённые примеры кода и плагины, чтобы быстро и безопасно избавиться от «мертвых» аккаунтов.