Ведение журнала изменений (логирования) в 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, который поможет создать интерактивный и удобный журнал изменений под ваши задачи.