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

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

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

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

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

Плагин Simple History

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

Для установки:

  • Перейдите в админку WordPress → Плагины → Добавить новый
  • Введите в поиске «Simple History»
  • Установите и активируйте плагин

После активации журнал доступен в меню Инструменты → Simple History.

Плагин WP Activity Log

WP Activity Log — более мощный инструмент для отслеживания активности пользователей и изменений. Позволяет создавать детальные отчёты, фильтровать события и отправлять уведомления. Имеет бесплатную версию и платные расширения.

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

Как создать простой журнал изменений с помощью кода в functions.php

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

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

Добавим функцию для создания таблицы при активации темы или плагина:

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

    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
        post_id BIGINT(20) UNSIGNED NOT NULL,
        user_id BIGINT(20) UNSIGNED NOT NULL,
        old_content LONGTEXT NOT NULL,
        new_content LONGTEXT NOT NULL,
        changed_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY  (id)
    ) $charset_collate;";

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

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

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

Используем хук post_updated, который запускается при обновлении записи:

function journalx_log_post_changes( $post_ID, $post_after, $post_before ) {
    if ( $post_before->post_content === $post_after->post_content ) {
        return; // Если содержимое не изменилось, не логируем
    }

    global $wpdb;
    $table_name = $wpdb->prefix . 'journalx_changes_log';
    $user_id = get_current_user_id();

    $wpdb->insert( 
        $table_name, 
        array( 
            'post_id' => $post_ID,
            'user_id' => $user_id,
            'old_content' => $post_before->post_content,
            'new_content' => $post_after->post_content,
            'changed_at' => current_time( 'mysql' )
        ), 
        array( '%d', '%d', '%s', '%s', '%s' ) 
    );
}
add_action( 'post_updated', 'journalx_log_post_changes', 10, 3 );

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

Отображение журнала изменений на сайте

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

function journalx_show_changes_log() {
    if ( ! is_singular() ) {
        return '';
    }

    global $wpdb;
    $post_id = get_the_ID();
    $table_name = $wpdb->prefix . 'journalx_changes_log';

    $changes = $wpdb->get_results( $wpdb->prepare( 
        "SELECT * FROM $table_name WHERE post_id = %d ORDER BY changed_at DESC", 
        $post_id
    ) );

    if ( empty( $changes ) ) {
        return '<p>Журнал изменений отсутствует.</p>';
    }

    $output = '<div class="journalx-changes-log"><h3>Журнал изменений</h3><ul>';
    foreach ( $changes as $change ) {
        $user_info = get_userdata( $change->user_id );
        $user_name = $user_info ? esc_html( $user_info->display_name ) : 'Неизвестный пользователь';
        $changed_at = date_i18n( 'd.m.Y H:i', strtotime( $change->changed_at ) );

        $output .= "<li><strong>{$changed_at}</strong> - Изменил: {$user_name}<br>";
        $output .= "<details><summary>Смотреть изменения</summary>";
        $output .= "<h4>Старое содержимое:</h4><div>" . wp_kses_post( wp_trim_words( $change->old_content, 30 ) ) . "</div>";
        $output .= "<h4>Новое содержимое:</h4><div>" . wp_kses_post( wp_trim_words( $change->new_content, 30 ) ) . "</div>";
        $output .= "</details></li>";
    }
    $output .= '</ul></div>';

    return $output;
}
add_shortcode( 'journalx_changes_log', 'journalx_show_changes_log' );

Добавьте шорткод [journalx_changes_log] в запись или страницу, чтобы отобразить журнал изменений для этой записи.

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

Если ваш сайт использует плагин Expert Review, можно расширить функционал журнала, добавив автоматическое создание отзывов-замечаний при изменении статьи. Это позволит экспертам быстро комментировать и оценивать внесённые правки.

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

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

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

  • Ограничивать количество хранимых записей, удаляя старые через WP Cron
  • Кэшировать вывод журнала для снижения количества запросов
  • Обеспечить защиту данных журнала от неавторизованного доступа, например, скрывая журнал от обычных пользователей

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

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

⭐⭐⭐⭐⭐
Как автоматически отмечать новые статьи в WordPress
18.03.2026
Как удалить текст из визуального редактора WordPress без оставшихся пустых страниц
09.12.2025
Как создать автоматический журнал изменений в WordPress с подробными примерами
13.01.2026
Как удалить записи в WordPress через AJAX без перезагрузки страницы
23.11.2025
Как создать автоматические журналы активности пользователей в WordPress с примерами кода и плагинов
07.01.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее