wp-lessons.ru wordpress WP-Lessons

Как избежать проблем с активностью пользователей WordPress

Управление активностью пользователей в WordPress — важный аспект для поддержки производительности сайта и безопасности. В больших проектах часто возникают проблемы с неактивными пользователями, ботами или злоумышленниками, замедляющими работу сайта и создающими лишнюю нагрузку. В этой статье мы разберём, как эффективно отслеживать и управлять активностью пользователей на WordPress с помощью кода и плагинов, а также как автоматизировать удаление или блокировку неактивных аккаунтов.

Почему важно контролировать активность пользователей

С течением времени на сайте могут накапливаться пользователи, которые давно не заходили, забыли пароль или были зарегистрированы ботами. Такие аккаунты:

  • Увеличивают нагрузку на базу данных, особенно при большом количестве пользователей.
  • Создают угрозу безопасности, если используются устаревшие пароли или их взламывают.
  • Засоряют списки пользователей и усложняют администрирование.

Регулярная очистка базы пользователей и мониторинг активности — залог стабильной и безопасной работы сайта.

Как определить неактивных пользователей WordPress

WordPress хранит дату последнего входа пользователя в мета-данных. Используя эту информацию, можно определить, кто не заходил на сайт в течение длительного времени.

Для начала нужно добавить запись даты последнего входа пользователя. Можно использовать следующий код, который добавляет мета-данные при успешном входе:

function wp_lessons_update_last_login( $login, $user ) {
    update_user_meta( $user->ID, 'wp_lessons_last_login', current_time('mysql') );
}
add_action( 'wp_login', 'wp_lessons_update_last_login', 10, 2 );

Этот код сохраняет дату и время последнего входа пользователя в формате MySQL datetime в мета-данных с ключом wp_lessons_last_login.

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

Следующий шаг — создание скрипта, который будет находить пользователей, не заходивших, например, более 180 дней, и удалять их. Ниже пример функции, которую можно запускать через WP-Cron или вручную:

function wp_lessons_delete_inactive_users() {
    $threshold = date('Y-m-d H:i:s', strtotime('-180 days'));

    $args = array(
        'meta_key' => 'wp_lessons_last_login',
        'meta_value' => $threshold,
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 100,
    );

    $users = get_users($args);

    foreach ( $users as $user_id ) {
        wp_delete_user( $user_id );
    }
}

Этот скрипт выбирает до 100 пользователей, которые не заходили дольше 180 дней, и удаляет их из базы. Можно расширить логику, добавив уведомления или резервное копирование перед удалением.

Запуск скрипта по расписанию с WP-Cron

Чтобы автоматизировать процесс, добавим задачу в WP-Cron, которая будет запускать функцию раз в сутки:

function wp_lessons_schedule_user_cleanup() {
    if ( ! wp_next_scheduled( 'wp_lessons_daily_user_cleanup' ) ) {
        wp_schedule_event( time(), 'daily', 'wp_lessons_daily_user_cleanup' );
    }
}
add_action( 'wp', 'wp_lessons_schedule_user_cleanup' );

add_action( 'wp_lessons_daily_user_cleanup', 'wp_lessons_delete_inactive_users' );

Это гарантирует регулярную очистку без вашего участия.

Использование плагинов для контроля активности

Если вы предпочитаете готовые решения, можно обратить внимание на плагины, которые помогают отслеживать и управлять пользователями:

  • Clearfy Pro — включает инструменты для оптимизации и чистки базы, в том числе удаление неактивных пользователей. Подробнее: https://wpshop.ru/plugins/clearfy-pro/
  • WPCommunity — плагин для управления сообществом, который умеет фильтровать и блокировать пользователей по активности и другим параметрам. Подробнее: https://wpshop.ru/plugins/wpcommunity/

Эти инструменты помогут автоматизировать задачи и снизить нагрузку на разработку кастомных скриптов.

Как блокировать или деактивировать пользователей без удаления

Иногда удаление неактивных пользователей нежелательно. Можно временно блокировать их доступ, изменяя роль или добавляя пользовательское поле.

Пример изменения роли пользователя на blocked:

function wp_lessons_block_user( $user_id ) {
    $user = new WP_User( $user_id );
    $user->set_role( 'blocked' );
}

Для этого нужно создать новую роль blocked с минимальными возможностями, например:

function wp_lessons_add_blocked_role() {
    add_role( 'blocked', 'Заблокирован', array('read' => false) );
}
add_action( 'init', 'wp_lessons_add_blocked_role' );

Таким образом, пользователь останется в системе, но не сможет выполнять никаких действий.

Автоматическая блокировка через WP-Cron

Можно модифицировать функцию удаления, чтобы вместо удаления менять роль на blocked, что позволит сохранить данные для анализа или повторного включения.

Практические рекомендации по работе с активностью пользователей

  • Регулярно проверяйте базу пользователей на неактивность и ботов.
  • Добавляйте дату последнего входа, если её нет, для точного мониторинга.
  • Автоматизируйте задачи с помощью WP-Cron для снижения ручной работы.
  • Используйте комбинированный подход: блокируйте, уведомляйте и удаляйте пользователей.
  • Перед удалением создавайте резервные копии базы пользователей.

Контроль активности пользователей — залог безопасности, производительности и удобства администрирования WordPress-сайта. Применяйте описанные методы, чтобы поддерживать порядок и чистоту в базе пользователей.

×
WordPress
прокачай свой сайт!

Скидка на премиум темы и плагины

Успей забрать скидку ⋙