Ведение журнала изменений (changelog) для записей и страниц в WordPress — важная задача, если вы хотите отслеживать все правки, сделанные в контенте. Это особенно актуально для сайтов с большим количеством авторов или для журналов, где требуется история редакций для прозрачности и контроля. В этой статье мы подробно рассмотрим, как создать автоматический журнал изменений в WordPress, используя как плагины, так и собственные решения на PHP с использованием хуков и REST API.
Почему важен журнал изменений в WordPress
Журнал изменений позволяет видеть, кто и когда вносил изменения в запись, какие именно правки были сделаны, и при необходимости откатиться к предыдущей версии. Это помогает повысить контроль качества контента, улучшить коммуникацию между авторами и избежать потери данных при ошибках.
Хотя WordPress по умолчанию хранит ревизии, их отображение и структура не всегда удобны для конечного пользователя. Именно поэтому автоматизация и кастомизация журнала изменений необходимы.
Использование плагинов для создания журнала изменений
Плагин Simple History
Simple History — популярный плагин, который отслеживает изменения в записях, страницах, плагинах и других элементах WordPress. Он сохраняет подробную историю действий и выводит её в удобном виде в админке.
Установка и настройка просты: достаточно установить плагин через каталог WordPress, активировать и перейти на страницу журнала изменений.
Плюсы Simple History:
- Отслеживает не только изменения записей, но и действия пользователей.
- Поддержка расширений и фильтров для кастомизации.
- Простота использования.
Подробнее о Simple History можно узнать на wpshop.ru.
Плагин WP Activity Log
WP Activity Log — более продвинутый плагин для ведения журнала активности. Он позволяет отслеживать детальные изменения контента и действий пользователей, поддерживает уведомления и экспорт лога.
Для журналов изменений записей он предлагает удобный интерфейс и фильтры по типам изменений.
Создание собственного журнала изменений с помощью кода
Если хочется полный контроль и легковесное решение, можно реализовать журнал изменений самостоятельно. Рассмотрим пример, как регистрировать изменения записи и сохранять их в отдельном метаполе.
Отслеживание изменений записи
Используем хук post_updated, который вызывается после обновления записи. В нем можно сравнить старое и новое содержимое и при изменении сохранить запись в журнал.
function journalx_post_update_log($post_ID, $post_after, $post_before) {
// Проверяем тип записи
if ($post_after->post_type !== 'post') {
return;
}
// Сравниваем содержимое
if ($post_after->post_content !== $post_before->post_content) {
$user = wp_get_current_user();
$time = current_time('mysql');
$entry = sprintf(
'Изменено %s пользователем %s\n',
$time,
$user->user_login
);
// Сохраняем старую версию
$old_content = $post_before->post_content;
$log_entry = "{$entry}---\n{$old_content}\n---\n";
// Получаем существующий журнал
$logs = get_post_meta($post_ID, '_journalx_change_log', true);
if (!$logs) {
$logs = '';
}
// Добавляем новую запись в начало журнала
$logs = $log_entry . $logs;
update_post_meta($post_ID, '_journalx_change_log', $logs);
}
}
add_action('post_updated', 'journalx_post_update_log', 10, 3);
В этом коде при каждом обновлении записи сохраняется старое содержимое с отметкой времени и автором изменений в метаполе _journalx_change_log.
Вывод журнала изменений в шаблоне
Чтобы показать журнал на фронтенде, добавим функцию вывода лога в шаблон single.php или в любом другом месте:
function journalx_display_change_log($post_id) {
$logs = get_post_meta($post_id, '_journalx_change_log', true);
if (!$logs) {
echo '<p>Изменений не найдено.</p>';
return;
}
// Разбиваем на записи по разделителю
$entries = explode('---', $logs);
echo '<div class="journalx-change-log"><h3>Журнал изменений</h3><ul>';
foreach ($entries as $entry) {
$entry = trim($entry);
if (empty($entry)) continue;
echo '<li><pre>' . esc_html($entry) . '</pre></li>';
}
echo '</ul></div>';
}
// Вызов в шаблоне single.php
journalx_display_change_log(get_the_ID());
Так вы получите простой и понятный журнал всех изменений контента поста.
Оптимизация и расширение журнала изменений
Для улучшения работы журнала можно:
- Добавить хранение только диффов (разниц) между версиями — это уменьшит объем хранимых данных.
- Интегрировать журнал с REST API для удобного доступа и управления через внешние приложения.
- Добавить уведомления администраторам о важных изменениях.
- Использовать AJAX для динамического подгрузки журнала на фронтенде без перезагрузки страницы.
Пример AJAX подгрузки журнала
Добавим обработчик AJAX, который вернет журнал в JSON:
function journalx_ajax_get_log() {
$post_id = intval($_POST['post_id']);
if (!$post_id) {
wp_send_json_error('Неверный ID записи');
}
$logs = get_post_meta($post_id, '_journalx_change_log', true);
wp_send_json_success($logs);
}
add_action('wp_ajax_journalx_get_log', 'journalx_ajax_get_log');
add_action('wp_ajax_nopriv_journalx_get_log', 'journalx_ajax_get_log');
На фронтенде можно написать JavaScript, который отправит запрос и выведет журнал без перезагрузки.
Вывод
Автоматический журнал изменений — мощный инструмент для контроля качества контента и прозрачности работы над сайтом. Используйте готовые плагины, если нужно быстро и удобно, или создавайте собственные решения для полной кастомизации. Приведенные примеры кода помогут вам начать и адаптировать функционал под свои задачи.