Ведение чистой и актуальной базы пользователей — важный аспект управления сайтом на WordPress. Особенно это актуально для проектов с регистрацией и большим количеством пользователей. Неактивные аккаунты могут занимать место в базе данных, создавать лишнюю нагрузку и даже представлять угрозу безопасности. В этой статье разберём, как автоматически удалять неактивных пользователей в WordPress с помощью собственного кода, чтобы держать базу в порядке и оптимизировать работу сайта.
Почему важно удалять неактивных пользователей в WordPress
Неактивные пользователи — это аккаунты, которые долгое время не заходили на сайт и не проявляли активности. Они могут быть созданы ботами, спамерами или реальными людьми, которые потеряли интерес к вашему проекту. Вот основные причины, почему стоит регулярно чистить базу:
- Оптимизация базы данных. Чем меньше ненужных записей, тем быстрее работают запросы и меньше размер резервных копий.
- Безопасность. Заброшенные аккаунты часто становятся целью взлома, что может привести к проникновению на сайт.
- Удобство аналитики. Реальная статистика пользователей помогает принимать правильные решения по развитию сайта.
Удаление неактивных пользователей вручную — трудоёмкий процесс, особенно если база большая. Автоматизация этой задачи решит проблему эффективно.
Как определить неактивного пользователя: критерии и способы
Ключевой момент — установить критерии, по которым пользователь считается неактивным. Обычно это отсутствие входа на сайт в течение определённого периода времени. WordPress хранит дату последнего входа пользователя в метаданных, но по умолчанию это не включено. Для отслеживания даты последнего логина можно использовать плагин или добавить свой код.
Отслеживание даты последнего входа с помощью кода
Добавим в functions.php вашей темы или в отдельный плагин следующий код для записи времени последнего входа пользователя:
function wpmoney_record_last_login( $login, $user ) {
update_user_meta( $user->ID, 'wpmoney_last_login', current_time('mysql') );
}
add_action( 'wp_login', 'wpmoney_record_last_login', 10, 2 );Этот код сохраняет дату и время последнего входа в метаполе wpmoney_last_login, что позволяет нам использовать эти данные для анализа активности.
Выбор периода неактивности
Часто используют период от 3 до 6 месяцев без входа как критерий неактивности. Вы можете настроить его под специфику вашего сайта.
Автоматическое удаление неактивных пользователей: пример функции
Теперь создадим функцию, которая будет находить и удалять пользователей, не заходивших на сайт дольше заданного периода. Для безопасности рекомендуется сначала выводить список таких пользователей и подтверждать удаление вручную, но в примере ниже реализуем полное удаление.
function wpmoney_delete_inactive_users() {
$days_inactive = 180; // Период неактивности в днях
$date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));
$args = array(
'meta_key' => 'wpmoney_last_login',
'meta_value' => $date_threshold,
'meta_compare' => '<',
'fields' => 'ID',
'number' => -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) {
if (!user_can($user_id, 'administrator')) { // Не удаляем админов
wp_delete_user($user_id);
}
}
}
}Объясняем логику:
- С помощью
WP_User_Queryполучаем всех пользователей, у которых дата последнего входа меньше пороговой. - Исключаем администраторов, чтобы случайно не удалить важных пользователей.
- Удаляем подходящих пользователей функцией
wp_delete_user().
Как запускать функцию автоматического удаления
Для автоматизации удобно использовать WP-Cron. Добавим событие, которое будет запускать функцию раз в неделю.
function wpmoney_schedule_inactive_user_cleanup() {
if (!wp_next_scheduled('wpmoney_inactive_user_cleanup_hook')) {
wp_schedule_event(time(), 'weekly', 'wpmoney_inactive_user_cleanup_hook');
}
}
add_action('wp', 'wpmoney_schedule_inactive_user_cleanup');
add_action('wpmoney_inactive_user_cleanup_hook', 'wpmoney_delete_inactive_users');Теперь функция wpmoney_delete_inactive_users() будет вызываться автоматически каждую неделю.
Дополнительные рекомендации и безопасность
Перед удалением пользователей стоит уведомить их по электронной почте, чтобы дать шанс сохранить аккаунт. Для этого можно добавить этап отправки письма с предупреждением за неделю до удаления.
Также не забудьте сделать резервную копию базы данных перед внедрением автоматического удаления пользователей.
Если хотите более продвинутые возможности, обратите внимание на плагин Clearfy Pro — он помогает оптимизировать базу и управлять пользователями, включая удаление неактивных.
Итоги
Автоматическое удаление неактивных пользователей позволяет поддерживать базу данных WordPress в порядке, снижать нагрузку и повышать безопасность сайта. С помощью простого кода, который отслеживает дату последнего входа и запускается по расписанию, вы можете легко реализовать такую очистку. Обязательно учитывайте безопасность и уведомляйте пользователей заранее, чтобы избежать потери важных аккаунтов.