Как автоматически отслеживать изменения в записях WordPress

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

Почему важно отслеживать изменения в записях WordPress

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

  • Зафиксировать, кто и когда изменил контент;
  • Восстановить предыдущие версии записи;
  • Улучшить контроль качества и безопасность;
  • Автоматизировать уведомления об изменениях для редакторов или администраторов.

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

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

Для большинства задач достаточно готовых плагинов. Вот несколько популярных вариантов:

1. WP Activity Log

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

  • Легко настраивается;
  • Отправляет уведомления по email;
  • Поддерживает фильтры и экспорт логов.

Можно загрузить с официального репозитория WordPress или с wpshop.ru.

2. Simple History

Простой и легкий плагин для просмотра истории изменений сайта прямо в админке.

  • Показывает кто и когда изменял записи, страницы и настройки;
  • Поддерживает расширения для кастомных типов записи;
  • Бесплатный и с открытым исходным кодом.

3. Stream

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

  • Поддерживает мультисайты;
  • Интеграция с внешними сервисами;
  • Расширяемый через API.

Кастомное решение для отслеживания изменений с помощью хука save_post

Если нужно легкое и гибкое решение без установки плагинов, можно реализовать простое логирование изменений с помощью хука save_post.

Пример функции, которая сохраняет лог изменений в отдельную таблицу базы данных:

function wpmanual_save_post_changes($post_id, $post, $update) {
    // Игнорируем автосохранения и ревизии
    if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) {
        return;
    }

    global $wpdb;
    $table_name = $wpdb->prefix . 'wpmanual_post_changes';

    // Получаем пользователя
    $user_id = get_current_user_id();

    // Логируем дату и время
    $time = current_time('mysql');

    // Получаем заголовок и содержимое
    $title = $post->post_title;
    $content = $post->post_content;

    // Вставляем запись в таблицу
    $wpdb->insert(
        $table_name,
        [
            'post_id' => $post_id,
            'user_id' => $user_id,
            'changed_at' => $time,
            'post_title' => $title,
            'post_content' => $content
        ]
    );
}
add_action('save_post', 'wpmanual_save_post_changes', 10, 3);

Для работы этого кода необходимо создать таблицу wp_wpmanual_post_changes в базе данных. Пример SQL-запроса для создания:

CREATE TABLE wp_wpmanual_post_changes (
  id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  post_id BIGINT(20) UNSIGNED NOT NULL,
  user_id BIGINT(20) UNSIGNED NOT NULL,
  changed_at DATETIME NOT NULL,
  post_title TEXT NOT NULL,
  post_content LONGTEXT NOT NULL,
  PRIMARY KEY (id)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Как вывести историю изменений в админке WordPress

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

Пример добавления страницы меню и вывода последних изменений:

function wpmanual_register_changes_menu() {
    add_menu_page(
        'История изменений',
        'История изменений',
        'manage_options',
        'wpmanual-changes',
        'wpmanual_display_changes'
    );
}
add_action('admin_menu', 'wpmanual_register_changes_menu');

function wpmanual_display_changes() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpmanual_post_changes';
    $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">';
    echo '<thead><tr><th>ID поста</th><th>Пользователь</th><th>Дата</th><th>Заголовок</th></tr></thead><tbody>';

    foreach ($results as $row) {
        $user_info = get_userdata($row->user_id);
        $user_name = $user_info ? $user_info->user_login : 'Неизвестен';
        echo "<tr><td>{$row->post_id}</td><td>{$user_name}</td><td>{$row->changed_at}</td><td>" . esc_html(mb_strimwidth($row->post_title, 0, 50, '...')) . "</td></tr>";
    }

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

Дополнительные советы по отслеживанию изменений в WordPress

Ограничение количества логов

Со временем таблица с логами может сильно вырасти. Рекомендуется настроить регулярное удаление старых записей с помощью CRON-задачи, чтобы не перегружать базу данных.

Интеграция с плагином Clearfy Pro

Если вы используете Clearfy Pro, там есть возможности по управлению ревизиями и оптимизации базы данных, что поможет контролировать историю изменений и улучшить производительность сайта. Подробнее о плагине смотрите на wpshop.ru.

Отправка уведомлений об изменениях

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

Пример отправки простого уведомления:

function wpmanual_notify_on_post_change($post_id, $post, $update) {
    if (!$update) return; // Только обновления

    $author = get_userdata($post->post_author);
    $subject = 'Изменена запись: ' . $post->post_title;
    $message = 'Пользователь ' . $author->user_login . ' изменил запись с ID ' . $post_id . '.';
    wp_mail('admin@example.com', $subject, $message);
}
add_action('save_post', 'wpmanual_notify_on_post_change', 20, 3);

Итоги

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

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

Как сделать автоматическое резервное копирование WordPress: лучшие методы и примеры кода
25.11.2025
Как удалить неиспользуемые шорткоды в WordPress
17.12.2025
Как сделать автоматический экспорт пользовательских данных в WordPress
23.01.2026
Как автоматизировать запуск событий в WordPress с помощью CRON Schedule
02.04.2026
WooCommerce: решение проблемы с нерабочими кодами купонов
18.06.2026