В процессе работы с WordPress на сайте со временем накапливается множество пользователей, которые давно не заходили или вообще не активны. Это может создавать нагрузку на базу данных и снижать безопасность, особенно если такие аккаунты имеют права администратора или редактора. В этой статье мы рассмотрим, как с помощью PHP автоматически находить и удалять неактивных пользователей в WordPress, опираясь на дату последнего входа. Вы узнаете, как реализовать это через функции и WP-CLI, а также как обезопасить процесс.
Почему важно удалять неактивных пользователей WordPress
Накопление неактивных аккаунтов — это не только лишний «мусор» в базе данных, но и потенциальная угроза безопасности. Взломанные или заброшенные учетные записи могут стать точкой входа для злоумышленников. Кроме того, при большом количестве пользователей ресурсы сервера тратятся на хранение и обработку лишних данных.
Регулярная очистка позволяет уменьшить нагрузку, повысить безопасность и упростить управление сайтом.
Способы выявления неактивных пользователей
Основным критерием для удаления является дата последнего входа пользователя. Однако WordPress по умолчанию не сохраняет эту информацию. Для решения задачи можно использовать один из следующих подходов:
- Добавить и обновлять мета-данные при каждом входе пользователя —
wp_usermetaполе, например,last_login. - Использовать плагины, которые ведут учёт активности.
- Анализировать дату регистрации и наличие активности в публикациях или комментариях, если логин не отслеживается.
Добавление отслеживания даты последнего входа через код
Для того чтобы записывать дату последнего входа, добавим следующий код в файл functions.php вашей темы или в отдельный плагин:
add_action('wp_login', 'wpstudy_update_last_login', 10, 2);
function wpstudy_update_last_login($user_login, $user) {
update_user_meta($user->ID, 'last_login', current_time('mysql'));
}
Это событие срабатывает при каждом успешном входе и записывает текущую дату и время в мета-поле last_login.
Удаление неактивных пользователей по дате последнего входа
После того как у нас есть мета-данные с датой последнего входа, можно написать функцию, которая будет удалять пользователей, не заходивших на сайт дольше заданного периода.
Пример функции удаления неактивных пользователей старше 180 дней
function wpstudy_delete_inactive_users($days = 180) {
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . intval($days) . ' days'));
$args = [
'meta_key' => 'last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'fields' => ['ID'],
'number' => 1000,
];
$user_query = new WP_User_Query($args);
$users = $user_query->get_results();
if (empty($users)) {
echo "Неактивных пользователей не найдено.";
return;
}
foreach ($users as $user_id) {
// Не удаляем администраторов для безопасности
if (in_array('administrator', get_userdata($user_id)->roles)) {
continue;
}
wp_delete_user($user_id);
echo "Пользователь с ID $user_id удалён.<br>";
}
}
// Для запуска вызывайте функцию, например, через WP-CLI или cron
// wpstudy_delete_inactive_users(180);
В этом коде мы ищем пользователей, чей last_login старше 180 дней, и удаляем их, кроме администраторов. Это снижает риск случайного удаления важных аккаунтов.
Автоматизация удаления через WP-Cron
Для регулярного удаления неактивных пользователей удобно настроить задачу в WordPress Cron. Добавьте следующий код для регистрации задачи и её выполнения:
add_action('wpstudy_cron_delete_inactive_users', 'wpstudy_delete_inactive_users_cron');
function wpstudy_delete_inactive_users_cron() {
wpstudy_delete_inactive_users(180);
}
// Регистрируем событие при активации темы или плагина
if (!wp_next_scheduled('wpstudy_cron_delete_inactive_users')) {
wp_schedule_event(time(), 'daily', 'wpstudy_cron_delete_inactive_users');
}
// Для предотвращения дублирования при деактивации
register_deactivation_hook(__FILE__, function() {
wp_clear_scheduled_hook('wpstudy_cron_delete_inactive_users');
});
Этот код запустит функцию удаления один раз в сутки. Вы можете изменить интервал по необходимости.
Использование плагинов для управления неактивными пользователями
Если вы не хотите писать код, существуют плагины, которые позволяют автоматически удалять или деактивировать пользователей по дате последнего входа. Среди них:
- Inactive User Deleter — простой и эффективный инструмент для удаления неактивных аккаунтов.
- WP Activity Log — более продвинутый плагин для мониторинга активности с возможностью фильтрации и массового удаления.
При использовании плагинов убедитесь, что они совместимы с вашей версией WordPress и протестируйте работу на тестовом сайте.
Как обезопасить процесс удаления пользователей
При автоматическом удалении пользователей важно не потерять нужные аккаунты. Рекомендуется:
- Исключать из удаления администраторов и редакторов.
- Делать резервные копии базы данных перед запуском удаления.
- Проводить удаление в нерабочее время или на тестовом стенде.
Пример исключения по роли
if (array_intersect(['administrator', 'editor'], get_userdata($user_id)->roles)) {
continue; // Пропускаем
}
Это гарантирует, что важные пользователи не будут случайно удалены.
Выводы и рекомендации
Удаление неактивных пользователей — важная задача для поддержания безопасности и производительности сайта WordPress. С помощью простого кода вы можете отслеживать дату последнего входа и автоматически очищать базу от заброшенных аккаунтов.
Если вы хотите упростить управление — используйте специализированные плагины, например, Inactive User Deleter с WPSHOP.RU.
Не забывайте о безопасности: всегда делайте резервные копии и исключайте из удаления администраторов.