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

Зачем нужен журнал изменений в WordPress

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

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

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

Основные события для логирования в WordPress

Для начала стоит определить, какие действия в системе необходимо логировать. Вот список ключевых событий:

  • Авторизация пользователя (успешные и неудачные попытки входа);
  • Создание, редактирование и удаление записей (постов, страниц, кастомных типов);
  • Изменение пользовательских ролей и прав;
  • Изменения настроек сайта;
  • Установка, активация и деактивация плагинов и тем;
  • Комментарии (добавление, редактирование, удаление);
  • Загрузка и удаление медиафайлов.

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

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

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

Создание таблицы для журнала

Добавим функцию для создания таблицы при активации плагина или темы. В реальном проекте этот код стоит разместить в файле плагина или в functions.php темы:

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

    $sql = "CREATE TABLE $table_name (  
      id BIGINT(20) NOT NULL AUTO_INCREMENT,  
      event_type VARCHAR(100) NOT NULL,  
      user_id BIGINT(20) NOT NULL,  
      event_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,  
      details TEXT NOT NULL,  
      PRIMARY KEY  (id)
    ) $charset_collate;";

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

Этот код создаст таблицу wp_journalx_log с полями для типа события, ID пользователя, времени события и подробностями.

Функция для записи событий в журнал

Создадим универсальную функцию, которая будет добавлять записи в нашу таблицу:

function journalx_log_event($event_type, $user_id, $details) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'journalx_log';

    $wpdb->insert(
        $table_name,
        [
            'event_type' => $event_type,
            'user_id' => $user_id,
            'details' => maybe_serialize($details),
            'event_time' => current_time('mysql', 1),
        ],
        [
            '%s', '%d', '%s', '%s'
        ]
    );
}

Обратите внимание, что детали события сериализуются для хранения сложных данных.

Логирование входа пользователя

Добавим хук для записи события при успешном входе пользователя:

add_action('wp_login', function($user_login, $user) {
    journalx_log_event('login', $user->ID, ['username' => $user_login]);
}, 10, 2);

Хук wp_login срабатывает при успешной авторизации, что позволяет нам записать событие.

Логирование создания и обновления записей

Для отслеживания изменений контента используем хук save_post:

add_action('save_post', function($post_id, $post, $update) {
    // Игнорируем автосохранения и ревизии
    if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) {
        return;
    }

    $user_id = get_current_user_id();
    $event_type = $update ? 'post_updated' : 'post_created';
    $details = [
        'post_id' => $post_id,
        'post_title' => $post->post_title,
        'post_type' => $post->post_type,
    ];

    journalx_log_event($event_type, $user_id, $details);
}, 10, 3);

Теперь при создании или обновлении записи в журнал попадёт соответствующая запись с данными.

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

Для удобства вы можете создать отдельную страницу в админке для вывода журнала. Ниже пример функции, которая выводит последние 20 записей:

function journalx_show_log_page() {
    if (!current_user_can('manage_options')) {
        wp_die('Доступ запрещён');
    }
    global $wpdb;
    $table_name = $wpdb->prefix . 'journalx_log';
    $results = $wpdb->get_results("SELECT * FROM $table_name ORDER BY event_time DESC LIMIT 20");

    echo '<h2>Журнал изменений</h2>';
    echo '<table class="wp-list-table widefat fixed striped">';
    echo '<thead><tr><th>ID</th><th>Событие</th><th>Пользователь</th><th>Время</th><th>Детали</th></tr></thead><tbody>';

    foreach ($results as $row) {
        $user_info = get_userdata($row->user_id);
        $details = maybe_unserialize($row->details);
        echo '<tr>';
        echo "<td>{$row->id}</td>";
        echo "<td>{$row->event_type}</td>";
        echo "<td>" . esc_html($user_info ? $user_info->user_login : 'Гость') . "</td>";
        echo "<td>{$row->event_time}</td>";
        echo "<td>" . esc_html(print_r($details, true)) . "</td>";
        echo '</tr>';
    }

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

// Добавьте пункт меню для страницы журнала
add_action('admin_menu', function() {
    add_menu_page('Журнал изменений', 'Журнал изменений', 'manage_options', 'journalx-log', 'journalx_show_log_page');
});

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

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

Если вы не хотите писать код, можно воспользоваться проверенными плагинами:

  • WP Activity Log — один из самых популярных и функциональных плагинов для аудита. Позволяет логировать любое действие, поддерживает фильтры и уведомления.
  • Simple History — удобный и лёгкий плагин с простым интерфейсом для просмотра истории изменений.
  • Activity Log — бесплатный и интуитивно понятный, подходит для базового аудита.

Для интеграции с продуктами WPShop можно обратить внимание на возможности расширения функционала с помощью их API и хуков.

Как повысить безопасность и производительность журнала

При ведении журнала важно учитывать несколько моментов:

  • Ограничение размера журнала. Старые записи стоит архивировать или удалять, чтобы база не разрасталась бесконтрольно.
  • Права доступа. Просмотр журнала должен быть доступен только администраторам или доверенным лицам.
  • Формат хранения данных. Используйте сериализацию или JSON для хранения сложных данных, чтобы можно было быстро их анализировать.
  • Производительность. Не логируйте слишком часто срабатывающие события без необходимости, чтобы не перегружать базу.

Правильная настройка и оптимизация журнала изменений позволит использовать его как мощный инструмент контроля.

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

⭐⭐⭐⭐⭐
Как реализовать выделение синтаксиса в визуальном редакторе WordPress
18.12.2025
Как создать динамические способы загрузки контента в WordPress
10.01.2026
Как добавить своё сообщение при отсутствии записей в WordPress
21.12.2025
Автоматическое удаление товаров из корзины WooCommerce по таймеру: практическое руководство
04.06.2026
Как сделать автоматический журнал изменений в WordPress с примерами кода и плагинов
14.03.2026
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙