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

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

Что такое журнал изменений и зачем он нужен в WordPress

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

  • Отслеживать историю правок и восстанавливать предыдущие версии;
  • Понимать, кто внёс изменения, что важно для крупных команд;
  • Обеспечивать прозрачность работы редакторов и авторов;
  • Повышать безопасность и контроль над сайтом.

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

Создание базового журнала изменений через хуки WordPress

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

Создание пользовательской таблицы для логов

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

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

    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id bigint(20) NOT NULL AUTO_INCREMENT,
        post_id bigint(20) NOT NULL,
        user_id bigint(20) NOT NULL,
        changed_at datetime NOT NULL,
        changes text NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";

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

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

Отслеживание изменений при сохранении записи

Чтобы фиксировать изменения, подключимся к хуку post_updated, который вызывается при обновлении записи.

function journalx_log_post_changes( $post_ID, $post_after, $post_before ) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'journalx_change_log';
    $user_id = get_current_user_id();
    $changed_at = current_time( 'mysql' );

    $changes = array();

    if ( $post_before->post_title !== $post_after->post_title ) {
        $changes[] = 'Title changed from "' . $post_before->post_title . '" to "' . $post_after->post_title . '"';
    }
    if ( $post_before->post_content !== $post_after->post_content ) {
        $changes[] = 'Content updated';
    }
    if ( empty( $changes ) ) {
        return; // Нет изменений, не логируем
    }

    $changes_text = implode( '; ', $changes );

    $wpdb->insert(
        $table_name,
        array(
            'post_id' => $post_ID,
            'user_id' => $user_id,
            'changed_at' => $changed_at,
            'changes' => $changes_text,
        ),
        array('%d', '%d', '%s', '%s')
    );
}
add_action( 'post_updated', 'journalx_log_post_changes', 10, 3 );

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

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

Чтобы сделать журнал удобным, добавим страницу в админке, где администраторы смогут просматривать логи.

function journalx_register_admin_page() {
    add_menu_page(
        'Журнал изменений',
        'Журнал изменений',
        'manage_options',
        'journalx-change-log',
        'journalx_render_change_log_page',
        'dashicons-clipboard',
        26
    );
}
add_action( 'admin_menu', 'journalx_register_admin_page' );

function journalx_render_change_log_page() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'journalx_change_log';

    $results = $wpdb->get_results( "SELECT * FROM $table_name ORDER BY changed_at 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>Изменения</th></tr></thead><tbody>';

    foreach ( $results as $row ) {
        $post_link = get_edit_post_link( $row->post_id );
        $post_title = get_the_title( $row->post_id );
        $user_info = get_userdata( $row->user_id );
        $user_name = $user_info ? $user_info->user_login : 'Неизвестно';

        echo '<tr>';
        echo '<td>' . esc_html( $row->id ) . '</td>';
        echo '<td><a href="' . esc_url( $post_link ) . '" target="_blank">' . esc_html( $post_title ) . '</a></td>';
        echo '<td>' . esc_html( $user_name ) . '</td>';
        echo '<td>' . esc_html( $row->changed_at ) . '</td>';
        echo '<td>' . esc_html( $row->changes ) . '</td>';
        echo '</tr>';
    }

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

Теперь в админке появится меню «Журнал изменений», где можно посмотреть последние 50 изменений с подробностями.

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

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

1. Simple History

Плагин ведёт подробный журнал активности пользователей: кто и когда изменил записи, страницы, настройки и многое другое. Очень удобный и легкий в использовании.

Плюсы:

  • Отображение лога прямо в админке;
  • Поддержка различных событий WordPress и плагинов;
  • Можно экспортировать данные для архивации.

2. WP Activity Log

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

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

3. Stream

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

  • Поддержка фильтров по типам событий;
  • Интеграция с REST API;
  • Возможность экспорта логов.

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

Интеграция с плагином JournalX для расширенного журнала

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

function journalx_add_custom_change_note( $post_ID ) {
    if ( isset( $_POST['journalx_change_note'] ) ) {
        update_post_meta( $post_ID, '_journalx_change_note', sanitize_text_field( $_POST['journalx_change_note'] ) );
    }
}
add_action( 'save_post', 'journalx_add_custom_change_note' );

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

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

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

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

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

⭐⭐⭐⭐⭐
Как использовать REST API WordPress для создания и управления журналом
06.04.2026
Как создать автоматический журнал изменений в WordPress с примерами кода и плагинов
07.03.2026
Как добавить отслеживание изменений в статьях WordPress с примерами кода и плагинов
12.02.2026
Как проверить и исправить проблемы с очисткой кеша в WooCommerce
22.05.2026
Как запретить копирование текста в WordPress: практическое руководство
02.02.2026
×
WordPress
дай сайту суперсилу!

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

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