Журнал активности пользователей в WordPress: настройка и примеры

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

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

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

  • Увеличения безопасности — отслеживать подозрительные действия и быстро реагировать;
  • Аудита — видеть, кто и когда вносил изменения;
  • Анализа поведения пользователей — улучшать интерфейс и контент;
  • Отладки — выявлять ошибки и проблемы на сайте.

Без такого инструмента сложно понять, что происходит за кулисами вашего сайта, особенно если на нём много администраторов или редакторов.

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

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

WP Activity Log

Один из самых мощных и функциональных плагинов для ведения журнала активности. Позволяет отслеживать более 400 событий, имеет фильтры и уведомления.

Особенности:

  • Легкая настройка и интерфейс;
  • Поддержка ролей пользователей;
  • Отчёты и экспорт данных;
  • Интеграция с WooCommerce, BuddyPress и другими.

Установка происходит через стандартный репозиторий WordPress. После активации вы получите журнал с подробной историей действий.

Stream

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

  • Отображает активность в реальном времени;
  • Имеет фильтрацию по типам событий;
  • Поддерживает расширения для интеграции с другими плагинами.

Подробности и загрузка — на странице плагина в официальном каталоге WordPress.

Создание простого журнала активности с помощью кода

Если нужно решение под себя, можно реализовать базовый журнал активности с помощью пользовательского кода. Ниже пример отслеживания входа пользователя и записи данных в отдельную таблицу базы.

Создание таблицы для хранения лога

function journalx_create_activity_log_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'journalx_user_activity';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE $table_name (
      id mediumint(9) NOT NULL AUTO_INCREMENT,
      user_id bigint(20) NOT NULL,
      activity varchar(255) NOT NULL,
      activity_time datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
      ip_address varchar(100) DEFAULT '' NOT NULL,
      PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'journalx_create_activity_log_table');

Этот код создаст таблицу wp_journalx_user_activity при активации плагина или темы.

Запись событий входа пользователя

function journalx_log_user_login($user_login, $user) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'journalx_user_activity';
    $ip = journalx_get_user_ip();

    $wpdb->insert(
        $table_name,
        [
            'user_id' => $user->ID,
            'activity' => 'User logged in',
            'ip_address' => $ip
        ]
    );
}
add_action('wp_login', 'journalx_log_user_login', 10, 2);

function journalx_get_user_ip() {
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

Этот код добавляет запись в таблицу при каждом входе пользователя, фиксируя ID, время и IP адрес.

Отображение журнала активности в админке

Чтобы просматривать журнал, можно создать простую страницу в админке WordPress с таблицей последних событий.

function journalx_register_admin_page() {
    add_menu_page(
        'Журнал активности',
        'Журнал активности',
        'manage_options',
        'journalx-activity-log',
        'journalx_render_admin_page',
        'dashicons-list-view',
        30
    );
}
add_action('admin_menu', 'journalx_register_admin_page');

function journalx_render_admin_page() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'journalx_user_activity';

    $results = $wpdb->get_results("SELECT * FROM $table_name ORDER BY activity_time DESC LIMIT 50");

    echo '<div class="wrap"><h1>Журнал активности пользователей</h1><table class="widefat fixed" cellspacing="0">';
    echo '<thead><tr><th>ID</th><th>Пользователь</th><th>Активность</th><th>Время</th><th>IP</th></tr></thead><tbody>';

    foreach ($results as $row) {
        $user_info = get_userdata($row->user_id);
        $user_name = $user_info ? esc_html($user_info->user_login) : 'Unknown';

        echo '<tr>';
        echo '<td>' . esc_html($row->id) . '</td>';
        echo '<td>' . $user_name . '</td>';
        echo '<td>' . esc_html($row->activity) . '</td>';
        echo '<td>' . esc_html($row->activity_time) . '</td>';
        echo '<td>' . esc_html($row->ip_address) . '</td>';
        echo '</tr>';
    }

    echo '</tbody></table></div>';
}

Так вы получите простой интерфейс для просмотра последних 50 событий.

Расширение журнала: отслеживание других действий

Вы можете легко добавить логирование других важных событий:

  • Создание, редактирование и удаление записей — хуки save_post, before_delete_post;
  • Регистрация новых пользователей — user_register;
  • Сброс пароля — after_password_reset;
  • Изменение профиля — profile_update.

Пример логирования создания записи:

function journalx_log_post_save($post_id, $post, $update) {
    if ($post->post_type !== 'post') return;

    global $wpdb;
    $table_name = $wpdb->prefix . 'journalx_user_activity';
    $user_id = get_current_user_id();
    $action = $update ? 'Updated post' : 'Created post';

    $wpdb->insert(
        $table_name,
        [
            'user_id' => $user_id,
            'activity' => "$action: {$post->post_title}",
            'ip_address' => journalx_get_user_ip()
        ]
    );
}
add_action('save_post', 'journalx_log_post_save', 10, 3);

Использование плагина JournalX Expert Review для расширенного аудита

Если на вашем сайте уже установлен плагин JournalX Expert Review, он может помочь в анализе пользовательской активности, собирая отзывы и оценки, что дополняет стандартный журнал событий. Интеграция с вашим журналом активности позволит получать более полную картину взаимодействия пользователей с контентом.

Советы по оптимизации журнала активности

Журнал активности может со временем сильно разрастаться, что влияет на производительность базы данных. Рекомендуется:

  • Периодически очищать старые записи (например, старше 6 месяцев);
  • Индексировать таблицу по полям user_id и activity_time для ускорения запросов;
  • Использовать кэширование при отображении данных в админке;
  • Ограничивать количество отображаемых записей на странице.

Пример удаления старых записей:

function journalx_cleanup_old_logs() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'journalx_user_activity';
    $wpdb->query($wpdb->prepare(
        "DELETE FROM $table_name WHERE activity_time < %s",
        date('Y-m-d H:i:s', strtotime('-6 months'))
    ));
}
// Запустить по крону или вручную

Выводы и рекомендации

Организация журнала активности пользователей в WordPress — задача решаемая как с помощью готовых плагинов, так и собственных решений с минимальным кодом. Важно продумывать, какие именно действия нужно отслеживать, и оптимизировать хранение данных, чтобы не перегружать сайт. Плагины WP Activity Log и Stream отлично подойдут для большинства задач, а при необходимости можно расширить функционал собственным кодом, как показано в примерах.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: удаление товаров из корзины через AJAX с подтверждением пользователя
18.05.2026
Как удалить товар из корзины WooCommerce без перезагрузки страницы
27.04.2026
Как создать динамические виджеты в WordPress с использованием AJAX
12.12.2025
Как создать автоматический список литературы в WordPress
24.03.2026
Как удалить параметры URL в WordPress без перезагрузки страницы
28.12.2025
×
WordPress
дай сайту суперсилу!

Скидки на топовые темы и плагины

Активировать суперсилу ⋙