В крупных и средних проектах на WordPress со временем накапливаются пользователи, которые давно не заходили на сайт и неактивны. Такие аккаунты могут занимать место в базе данных, создавать дополнительные нагрузки и даже представлять угрозу безопасности. В этой статье рассмотрим, как реализовать автоматическое удаление неактивных пользователей WordPress по времени последнего входа с помощью кода.
Почему важно удалять неактивных пользователей
Удаление неактивных пользователей помогает поддерживать базу данных в чистоте и оптимальном состоянии. Это снижает вероятность утечек данных, уменьшает нагрузку на сайт и упрощает администрирование. Особенно актуально для сайтов с регистрацией и форумами, где сотни или тысячи пользователей могут не заходить месяцами и годами.
Кроме того, удаление неактивных аккаунтов позволяет сохранять актуальную аудиторию и улучшать показатели конверсии при рассылках и других коммуникациях.
Как определить неактивного пользователя в WordPress
По умолчанию WordPress не хранит дату последнего входа пользователя. Значит, первым шагом будет реализация способа фиксации даты последнего логина. Для этого можно использовать плагин или добавить код в functions.php темы или отдельный плагин.
Добавление даты последнего входа через хук
Добавим функцию, которая будет сохранять мета-поле last_login с отметкой времени при каждом успешном входе пользователя:
function wpcat_update_last_login( $user_login, $user ) {
update_user_meta( $user->ID, 'last_login', current_time( 'mysql' ) );
}
add_action( 'wp_login', 'wpcat_update_last_login', 10, 2 );Этот код сработает при каждом входе и обновит время в базе. Теперь у каждого пользователя будет актуальная дата последнего посещения.
Создание функции для удаления неактивных пользователей
Теперь реализуем функцию, которая найдет пользователей, которые не заходили, например, более 180 дней, и удалит их.
function wpcat_delete_inactive_users() {
$days_inactive = 180; // Порог неактивности в днях
$date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days_inactive} days" ) );
$args = array(
'meta_key' => 'last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'fields' => 'ID',
'number' => 1000 // Максимум за 1 запуск
);
$users = get_users( $args );
foreach ( $users as $user_id ) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user( $user_id );
}
}Этот код найдет пользователей с датой последнего входа раньше даты порога и удалит их. Для безопасности лучше запускать удаление не вручную, а по расписанию.
Автоматизация удаления через WP-Cron
Чтобы не запускать удаление вручную, можно настроить задачу cron, которая будет вызываться, например, раз в неделю.
function wpcat_schedule_inactive_user_deletion() {
if ( ! wp_next_scheduled( 'wpcat_cron_delete_inactive_users' ) ) {
wp_schedule_event( time(), 'weekly', 'wpcat_cron_delete_inactive_users' );
}
}
add_action( 'wp', 'wpcat_schedule_inactive_user_deletion' );
add_action( 'wpcat_cron_delete_inactive_users', 'wpcat_delete_inactive_users' );Этот код создаёт еженедельное событие, которое вызывает функцию удаления.
Дополнительные рекомендации и нюансы
1. Резервное копирование: Перед внедрением автоматического удаления обязательно настройте регулярные бэкапы базы данных.
2. Исключения: Если нужно сохранить некоторые аккаунты (например, админов или VIP), добавьте проверку ролей в функцию удаления.
3. Уведомления: Можно реализовать оповещение пользователей о предстоящем удалении, чтобы они могли зайти и отменить удаление.
4. Масштабируемость: Если пользователей очень много, разделите удаление на части, чтобы избежать тайм-аутов.
Пример исключения администраторов из удаления
foreach ( $users as $user_id ) {
$user = get_userdata( $user_id );
if ( in_array( 'administrator', (array) $user->roles ) ) {
continue; // Не удаляем админов
}
wp_delete_user( $user_id );
}Плагины для контроля активности пользователей в WordPress
Если вы предпочитаете готовые решения, можно использовать плагины, которые отслеживают активность пользователей и позволяют выполнять массовые действия:
- Inactive User Deleter — плагин для удаления неактивных пользователей по разным параметрам.
- Last Login — отображает дату последнего входа, помогает анализировать активность.
Для интеграции с этими плагинами можно использовать собственные функции, адаптируя их под ваши задачи.
Выводы
Автоматическое удаление неактивных пользователей — полезный инструмент для поддержания порядка в базе WordPress. Используя простой код и WP-Cron, вы можете настроить регулярное удаление с учетом индивидуальных требований и безопасности.
Если хотите упростить задачи управления пользователями, обратите внимание на Inactive User Deleter на wpshop.ru — плагин с удобным интерфейсом и поддержкой разных условий удаления.