Управление пользователями на сайте WordPress — важная задача, особенно если ваш проект активно развивается и накапливает большое количество учетных записей. Неактивные пользователи создают нагрузку на базу данных, увеличивают риск безопасности и усложняют администрирование. В этой статье мы разберем, как автоматически удалять неактивных пользователей WordPress, используя как плагины, так и кастомный код. Это позволит поддерживать чистоту базы и повысить безопасность сайта.
Почему важно удалять неактивных пользователей WordPress
Часто на сайтах накапливается множество пользователей, которые давно не заходили на сайт и не взаимодействовали с контентом. Это особенно актуально для проектов с регистрацией и личными кабинетами. Вот несколько причин, почему стоит периодически очищать базу:
- Оптимизация базы данных. Удаление неактивных аккаунтов уменьшает размер таблиц и ускоряет запросы.
- Повышение безопасности. Сокращение количества учетных записей снижает поверхность атаки для брутфорс-атак и других угроз.
- Чистота пользовательской базы. Это важно для маркетинговых и аналитических задач.
Автоматизация процесса удаления помогает не забывать эту задачу и минимизировать ручной труд.
Как определить неактивного пользователя WordPress
Ключевой вопрос — по каким критериям считать пользователя неактивным. Обычно используют следующие показатели:
- Дата последнего входа на сайт. Если пользователь не заходил на сайт более N месяцев, считается неактивным.
- Дата последнего обновления профиля или публикации. Можно учитывать активность в комментариях или других взаимодействиях.
- Отсутствие заказов или действий на сайте (для WooCommerce).
В WordPress по умолчанию не сохраняется дата последнего входа пользователя, поэтому нужно добавить эту функциональность самостоятельно или использовать готовые решения.
Добавление отслеживания даты последнего входа пользователя
Для начала добавим в WordPress хранение времени последнего входа пользователя. Это позволит потом фильтровать неактивных.
function wppremium_update_last_login( $login, $user ) {
update_user_meta( $user->ID, 'wppremium_last_login', current_time( 'timestamp' ) );
}
add_action( 'wp_login', 'wppremium_update_last_login', 10, 2 );Этот код добавляет мета-поле wppremium_last_login с отметкой времени последнего входа пользователя. Теперь можно использовать этот параметр для фильтрации.
Автоматическое удаление неактивных пользователей с помощью кода
Далее создадим функцию, которая будет искать пользователей, не заходивших на сайт, например, более 6 месяцев, и удалять их. Чтобы не перегружать сайт, запускать её будем через WP-Cron.
function wppremium_delete_inactive_users() {
$threshold = strtotime( '-6 months' );
$args = array(
'meta_key' => 'wppremium_last_login',
'meta_value' => $threshold,
'meta_compare' => '<',
'fields' => 'ID',
'number' => 50 // ограничение на удаление за один запуск
);
$inactive_users = get_users( $args );
foreach ( $inactive_users as $user_id ) {
// Не удаляем админов
if ( user_can( $user_id, 'administrator' ) ) {
continue;
}
wp_delete_user( $user_id );
}
}
// Добавляем событие в WP-Cron, если оно не запланировано
if ( ! wp_next_scheduled( 'wppremium_cron_delete_inactive_users' ) ) {
wp_schedule_event( time(), 'daily', 'wppremium_cron_delete_inactive_users' );
}
add_action( 'wppremium_cron_delete_inactive_users', 'wppremium_delete_inactive_users' );Этот скрипт ежедневно проверяет и удаляет до 50 неактивных пользователей старше 6 месяцев, исключая администраторов.
Плагины для удаления неактивных пользователей WordPress
Если не хочется писать код, можно использовать готовые решения:
- Inactive User Deleter — простой плагин, который удаляет пользователей, не заходивших на сайт заданный период.
- Clearfy Pro — многофункциональный плагин для оптимизации и безопасности, в том числе умеет чистить базу пользователей.
Преимущество плагинов — графический интерфейс и дополнительные настройки, минус — лишние зависимости.
Как обезопасить процесс удаления пользователей
При автоматическом удалении важно не потерять нужных пользователей и не навредить работе сайта. Рекомендации:
- Исключайте из удаления администраторов и редакторов.
- Перед удалением делайте резервные копии базы.
- Устанавливайте ограничение по числу удаляемых за один раз аккаунтов.
- Проверяйте логи и уведомляйте администратора.
В код выше реализованы некоторые из этих пунктов, но при необходимости можно добавить уведомления по email или логирование.
Расширение функционала: отправка уведомлений неактивным пользователям
Для корректного UX можно перед удалением уведомлять пользователей о предстоящем удалении их аккаунта. Для этого добавим функцию отправки email за 7 дней до удаления.
function wppremium_notify_inactive_users() {
$threshold_notify = strtotime( '-6 months +7 days' );
$args = array(
'meta_key' => 'wppremium_last_login',
'meta_value' => $threshold_notify,
'meta_compare' => '<',
'fields' => 'ID',
'number' => 50
);
$users = get_users( $args );
foreach ( $users as $user_id ) {
$user = get_userdata( $user_id );
$last_notified = get_user_meta( $user_id, 'wppremium_last_notification', true );
if ( ! $last_notified ) {
wp_mail( $user->user_email, 'Уведомление об удалении аккаунта', 'Ваш аккаунт будет удален через 7 дней из-за неактивности.' );
update_user_meta( $user_id, 'wppremium_last_notification', current_time( 'timestamp' ) );
}
}
}
add_action( 'wppremium_cron_notify_inactive_users', 'wppremium_notify_inactive_users' );
if ( ! wp_next_scheduled( 'wppremium_cron_notify_inactive_users' ) ) {
wp_schedule_event( time(), 'daily', 'wppremium_cron_notify_inactive_users' );
}Теперь два процесса — уведомление и удаление — работают параллельно, что улучшает взаимодействие с пользователями.
Итоги и рекомендации
Автоматическое удаление неактивных пользователей — важный элемент поддержки WordPress-сайта. Используйте хранение даты последнего входа, периодическую проверку и удаление через WP-Cron. При необходимости добавляйте уведомления и исключения по ролям. Если не хотите писать код, рассмотрите плагины вроде Clearfy Pro, которые упростят задачу.
Так вы гарантируете, что база пользователей останется чистой, а сайт — быстрым и безопасным.