Как добавить автоматическое отслеживание изменений в WordPress

Отслеживание изменений на сайте 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 — задача, которую можно решить как с помощью мощных плагинов, так и собственным кодом. Плагины быстро запускают процесс и обеспечивают удобный интерфейс, а кастомный код даёт гибкость под любые требования.

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

WooCommerce: как автоматически удалить товар при отсутствии на складе
18.05.2026
WooCommerce: как настроить автоматическое удаление товаров при отсутствии на складе
03.06.2026
Как добавить автоматическое отслеживание изменений в WordPress
13.04.2026
Удаление неиспользуемых taxonomy terms в WordPress: пошаговое руководство
26.02.2026
Как избежать проблем с кэшем при разработке плагинов WordPress
10.12.2025

Совсем скоро здесь откроется ресурс о вордпресс.