Отслеживание изменений на сайте WordPress — важная задача для тех, кто хочет контролировать все правки, обновления и действия пользователей. Это позволяет быстро выявлять ошибки, восстанавливать данные и вести аудит безопасности. В этой статье разберём, как добавить автоматическое отслеживание изменений в WordPress с помощью кастомного кода и готовых плагинов.
Почему важно отслеживать изменения в WordPress
Отслеживание изменений помогает:
- Мониторить редактирование контента — кто, когда и что изменил.
- Контролировать обновления плагинов и тем, чтобы избежать конфликтов.
- Анализировать действия пользователей, особенно если на сайте несколько редакторов.
- Восстанавливать случайно удалённые или изменённые данные.
- Обеспечивать безопасность и аудит, замечая подозрительные действия.
Без такой системы легко упустить момент появления ошибки или злонамеренного изменения.
Использование плагинов для отслеживания изменений
Популярные плагины для логирования и аудита изменений
Существует несколько надёжных плагинов, которые помогут автоматизировать отслеживание:
- Simple History — записывает изменения контента, входы пользователей, обновления плагинов и многое другое. Удобный интерфейс для просмотра истории.
- WP Activity Log — мощный плагин с расширенными возможностями аудита, включая уведомления и фильтрацию.
- Stream — ведёт журнал действий в реальном времени, поддерживает интеграции с внешними сервисами.
Установка и активация любого из этих плагинов займёт несколько минут, после чего вы сразу получите доступ к подробной истории изменений.
Как настроить Simple History
После установки и активации Simple History перейдите в Консоль → Simple History. Здесь вы увидите ленту последних действий. В настройках можно выбрать, какие события отслеживать, например, публикацию постов, обновления, входы пользователей.
Simple History можно расширять и кастомизировать через фильтры и хуки, если необходимо более специфичное логирование.
Создание собственного механизма отслеживания изменений на базе кода
Зачем писать свой код, если есть плагины?
Плагины дают удобство, но если нужны нестандартные возможности — например, отслеживание изменений в пользовательских таблицах или специфичных мета-полях, стоит написать собственное решение.
Примером может служить отслеживание изменений в кастомных постах или мета-полях с записью в отдельную таблицу базы данных или лог-файл.
Пример кода для отслеживания изменений постов
Добавим функцию, которая будет фиксировать изменения при сохранении поста и записывать их в отдельную таблицу wpmeta_post_changes. Для начала создадим таблицу при активации плагина:
function wpmeta_create_changes_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'post_changes';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
post_id bigint(20) NOT NULL,
user_id bigint(20) NOT NULL,
old_content longtext NOT NULL,
new_content longtext NOT NULL,
changed_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
PRIMARY KEY (id)
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
}
register_activation_hook( __FILE__, 'wpmeta_create_changes_table' );Теперь напишем функцию, которая будет срабатывать при сохранении поста и сохранять изменения:
function wpmeta_track_post_changes( $post_id, $post, $update ) {
if ( wp_is_post_revision( $post_id ) || wp_is_post_autosave( $post_id ) ) {
return;
}
global $wpdb;
$table_name = $wpdb->prefix . 'post_changes';
// Получаем старый пост
$old_post = get_post( $post_id );
if ( $update ) {
$old_content = $old_post->post_content;
$new_content = $post->post_content;
if ( $old_content !== $new_content ) {
$user_id = get_current_user_id();
$wpdb->insert(
$table_name,
[
'post_id' => $post_id,
'user_id' => $user_id,
'old_content' => $old_content,
'new_content' => $new_content,
'changed_at' => current_time( 'mysql' )
]
);
}
}
}
add_action( 'wp_insert_post', 'wpmeta_track_post_changes', 10, 3 );Этот простой код будет записывать в базу все изменения в содержимом постов с указанием пользователя и времени изменения. Таблицу можно расширять, добавляя хранение заголовков, статусов и других данных.
Вывод изменений в админке
Чтобы просмотреть журнал изменений внутри WordPress, можно добавить свой административный экран.
function wpmeta_add_changes_menu() {
add_menu_page(
'Журнал изменений',
'Журнал изменений',
'manage_options',
'wpmeta-changes-log',
'wpmeta_display_changes_page',
'dashicons-clipboard',
26
);
}
add_action( 'admin_menu', 'wpmeta_add_changes_menu' );
function wpmeta_display_changes_page() {
global $wpdb;
$table_name = $wpdb->prefix . 'post_changes';
$changes = $wpdb->get_results( "SELECT * FROM $table_name ORDER BY changed_at DESC LIMIT 50" );
echo '<div class="wrap"><h1>Журнал изменений постов</h1><table class="widefat"><thead><tr><th>ID</th><th>Пост</th><th>Пользователь</th><th>Дата</th><th>Старое содержимое</th><th>Новое содержимое</th></tr></thead><tbody>';
foreach ( $changes as $change ) {
$post_title = get_the_title( $change->post_id );
$user_info = get_userdata( $change->user_id );
echo '<tr>' .
'<td>' . esc_html( $change->id ) . '</td>' .
'<td>' . esc_html( $post_title ) . '</td>' .
'<td>' . esc_html( $user_info ? $user_info->user_login : 'Неизвестен' ) . '</td>' .
'<td>' . esc_html( $change->changed_at ) . '</td>' .
'<td>' . esc_html( wp_trim_words( $change->old_content, 10 ) ) . '</td>' .
'<td>' . esc_html( wp_trim_words( $change->new_content, 10 ) ) . '</td>' .
'</tr>';
}
echo '</tbody></table></div>';
}Дополнительные советы и рекомендации
Отслеживание изменений в мета-полях
Для полноты аудита часто нужно отслеживать изменения и в мета-полях. Для этого можно использовать хук updated_post_meta или писать собственные функции при сохранении поста, сравнивая старые и новые значения.
Уведомления о важных изменениях
Если на сайте важный контент, можно настроить уведомления по email или в админку при определённых изменениях, используя действия и фильтры WordPress.
Использование плагина Clearfy Pro для оптимизации и безопасности
Плагин Clearfy Pro поможет не только оптимизировать сайт, но и усилить безопасность, что важно при отслеживании критичных изменений.
Выводы
Добавление автоматического отслеживания изменений в WordPress — задача, которую можно решить как с помощью мощных плагинов, так и собственным кодом. Плагины быстро запускают процесс и обеспечивают удобный интерфейс, а кастомный код даёт гибкость под любые требования.
Используйте описанные методы в зависимости от задач и возможностей вашего проекта, чтобы всегда иметь полную историю изменений и обеспечить контроль над сайтом.