В крупных WordPress-сайтах с регистрацией пользователей часто возникает задача поддерживать базу актуальной, удаляя неактивных пользователей. Это помогает снизить нагрузку на базу данных и повысить безопасность сайта. В этой статье подробно разберём, как настроить автоматическое удаление пользователей, которые не заходили на сайт длительное время.
Почему важно удалять неактивных пользователей WordPress
Неактивные пользователи могут создавать риски безопасности — например, если их аккаунты взломают, злоумышленники смогут получить доступ к сайту. Кроме того, большое количество неактивных пользователей затрудняет управление, а база данных растёт без пользы, замедляя работу сайта.
Автоматизация удаления позволяет систематически очищать базу, не тратя время на ручной перебор. Особенно это актуально для сайтов с большой регистрацией и длительным сроком существования.
Выбор критериев для удаления пользователей
Прежде чем создавать код или использовать плагин, определите критерии, по которым пользователь считается неактивным. Самые распространённые варианты:
- Дата последнего входа на сайт (login).
- Дата последнего обновления профиля.
- Отсутствие активности за определённый период (например, 6 месяцев или год).
WordPress по умолчанию не хранит дату последнего входа, поэтому для реализации потребуется сохранять это значение самостоятельно или использовать сторонние плагины.
Как отслеживать последний вход пользователя с помощью кода
Добавим код, который будет сохранять время последнего входа пользователя в метаданные. Для этого используем хук wp_login:
function wpunit_update_last_login( $user_login, $user ) {
update_user_meta( $user->ID, 'wpunit_last_login', current_time('mysql') );
}
add_action( 'wp_login', 'wpunit_update_last_login', 10, 2 );Этот код обновляет метаданные wpunit_last_login при каждом входе пользователя. Дату удобно хранить в формате MySQL для последующих сравнений.
Создание функции автоматического удаления неактивных пользователей
Теперь создадим функцию, которая будет находить пользователей с датой последнего входа старше заданного периода и удалять их. Для запуска используем WP-Cron.
function wpunit_delete_inactive_users() {
$threshold = date('Y-m-d H:i:s', strtotime('-180 days')); // 180 дней назад
$args = array(
'meta_key' => 'wpunit_last_login',
'meta_value' => $threshold,
'meta_compare' => '<',
'fields' => 'ID',
'number' => 50 // количество за раз
);
$users = get_users( $args );
foreach ( $users as $user_id ) {
wp_delete_user( $user_id );
}
}
// Планируем событие, если оно не запланировано
if ( ! wp_next_scheduled( 'wpunit_cron_delete_inactive_users' ) ) {
wp_schedule_event( time(), 'daily', 'wpunit_cron_delete_inactive_users' );
}
add_action( 'wpunit_cron_delete_inactive_users', 'wpunit_delete_inactive_users' );В этом примере мы удаляем пользователей, не заходивших последние 180 дней, ограничиваясь 50 пользователями в одном запуске для минимизации нагрузки. Событие запускается ежедневно.
Обработка пользователей без даты последнего входа
Пользователи, для которых не установлено значение wpunit_last_login, могут быть либо новыми, либо такими, кто не заходил после внедрения системы. Чтобы не удалять случайно, можно добавить дополнительную проверку по дате регистрации:
function wpunit_delete_inactive_users() {
$threshold = date('Y-m-d H:i:s', strtotime('-180 days'));
$args = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'wpunit_last_login',
'value' => $threshold,
'compare' => '<'
),
array(
'key' => 'wpunit_last_login',
'compare' => 'NOT EXISTS'
),
),
'date_query' => array(
array(
'column' => 'user_registered',
'before' => $threshold,
),
),
'fields' => 'ID',
'number' => 50,
);
$users = get_users( $args );
foreach ( $users as $user_id ) {
wp_delete_user( $user_id );
}
}Так мы учитываем и тех, у кого отсутствует информация о последнем входе, но дата регистрации давно.
Использование плагинов для удаления неактивных пользователей
Если вы предпочитаете готовые решения, рассмотрите следующие плагины:
- Clearfy Pro — содержит функции для оптимизации и управления пользователями, в том числе очистку неактивных.
- Inactive User Deleter — популярный плагин для удаления пользователей с долгим периодом бездействия.
При использовании плагинов важно внимательно настроить параметры, чтобы не удалить нужных пользователей.
Рекомендации по безопасности и резервному копированию
Перед внедрением автоматического удаления убедитесь, что у вас настроено регулярное резервное копирование базы данных. Это позволит восстановить данные в случае ошибки или удаления нужных пользователей.
Также рекомендуется уведомлять пользователей о предстоящем удалении аккаунтов из-за неактивности, чтобы они могли своевременно войти и сохранить свой доступ.
Заключение
Автоматическое удаление неактивных пользователей — эффективный способ поддерживать WordPress-сайт в порядке. Используя собственные функции и WP-Cron, вы можете гибко настроить процесс под свои задачи. Если хотите упростить работу — рассмотрите качественные плагины, например, Clearfy Pro. Главное — внимательно тестировать и создавать резервные копии.