wpcat.ru wordpress WPCat.ru

Как добавить автоматическое удаление неактивных пользователей в WordPress

В крупных и средних проектах на 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 — плагин с удобным интерфейсом и поддержкой разных условий удаления.

×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее