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

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

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

Отслеживание изменений помогает контролировать, кто, когда и что изменил в контенте сайта. Это актуально для сайтов с несколькими авторами, корпоративных порталов и проектов, где важна прозрачность и история правок. Стандартный функционал ревизий WordPress хранит только содержимое и метаданные, но не позволяет удобно реагировать на изменения программно.

Реализовав свое собственное решение, можно:

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

Основные хуки для отслеживания изменений в постах

WordPress предоставляет несколько полезных хуков, которые срабатывают при обновлении, создании и удалении постов. Вот самые важные:

  • save_post — вызывается при создании или обновлении поста;
  • post_updated — вызывается после обновления поста, получает старые и новые данные;
  • wp_insert_post — срабатывает после вставки поста в базу;
  • before_delete_post — перед удалением поста;
  • transition_post_status — отслеживает смену статуса поста (например, из черновика в опубликованный).

Для задачи отслеживания изменений оптимально использовать post_updated, так как он предоставляет как старые, так и новые значения.

Пример реализации функции отслеживания изменений в постах

Рассмотрим пример функции, которая при обновлении поста сравнивает старое и новое содержание, а затем логирует изменения в отдельный файл. Такой подход можно адаптировать под запись в базу или отправку уведомлений.

function wpclass_post_changes_log($post_ID, $post_after, $post_before) {
    // Проверяем тип записи, чтобы отслеживать только посты
    if ($post_after->post_type !== 'post') {
        return;
    }

    $changes = [];

    // Сравниваем заголовок
    if ($post_after->post_title !== $post_before->post_title) {
        $changes[] = 'Title changed from "' . $post_before->post_title . '" to "' . $post_after->post_title . '"';
    }

    // Сравниваем содержимое
    if ($post_after->post_content !== $post_before->post_content) {
        $changes[] = 'Content updated.';
    }

    // Сравниваем статус
    if ($post_after->post_status !== $post_before->post_status) {
        $changes[] = 'Status changed from ' . $post_before->post_status . ' to ' . $post_after->post_status;
    }

    if (!empty($changes)) {
        $log_entry = date('Y-m-d H:i:s') . ' | Post ID: ' . $post_ID . ' | Changes: ' . implode('; ', $changes) . "\n";
        // Путь к файлу лога, можно менять по необходимости
        $log_file = WP_CONTENT_DIR . '/post_changes.log';
        file_put_contents($log_file, $log_entry, FILE_APPEND);
    }
}
add_action('post_updated', 'wpclass_post_changes_log', 10, 3);

В этом коде мы используем хук post_updated, который передает ID поста, новую версию объекта и старую версию. После проверки типа поста мы сравниваем ключевые поля — заголовок, содержимое и статус. Если есть изменения, формируем строку и дописываем её в файл post_changes.log в папке wp-content.

Расширение функционала: логирование метаданных и пользовательских полей

В дополнение к основным полям можно отслеживать изменения в пользовательских полях (метаданных). Для этого потребуется получить старые и новые метаданные и сравнить их.

Пример проверки изменения пользовательского поля _wpclass_custom_field:

function wpclass_post_meta_changes_log($post_ID, $post_after, $post_before) {
    $meta_key = '_wpclass_custom_field';
    $old_value = get_post_meta($post_before->ID, $meta_key, true);
    $new_value = get_post_meta($post_after->ID, $meta_key, true);

    if ($old_value !== $new_value) {
        $log_entry = date('Y-m-d H:i:s') . ' | Post ID: ' . $post_ID . " | Meta '{$meta_key}' changed from '{$old_value}' to '{$new_value}'\n";
        $log_file = WP_CONTENT_DIR . '/post_meta_changes.log';
        file_put_contents($log_file, $log_entry, FILE_APPEND);
    }
}
add_action('post_updated', 'wpclass_post_meta_changes_log', 15, 3);

Такой подход позволит отслеживать любые важные поля, которые вы добавляете к постам, например SEO-параметры или кастомные данные.

Использование плагина Clearfy Pro для управления логами и аудитом

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

Clearfy Pro позволяет:

  • отслеживать детальные логи изменений,
  • фильтровать события по пользователям и типам постов,
  • настраивать уведомления,
  • и экспортировать данные для анализа.

Это решение подойдет для тех, кто хочет быстро получить мощный функционал без глубокого программирования.

Советы по оптимизации и безопасности при логировании изменений

При реализации собственного логирования важно учесть несколько аспектов:

  • Производительность: запись логов в базу или файлы должна быть оптимальной и не замедлять работу сайта. Используйте асинхронные задачи или отложенные записи, если объем большой.
  • Безопасность: файлы логов не должны быть доступны напрямую из интернета. Размещайте их вне публичной директории или защитите с помощью .htaccess.
  • Объем данных: контролируйте размер логов и реализуйте ротацию (удаление старых записей), чтобы не занимать слишком много места.
  • Проверка прав: учитывайте, что не все изменения должны логироваться (например, для администраторов можно сделать исключения).

Заключение

Отслеживание изменений в постах WordPress — задача, которая помогает лучше контролировать контент и обеспечивать прозрачность работы сайта. Используя хуки, вы можете реализовать гибкие и эффективные механизмы логирования. Приведённые примеры кода легко адаптируются под ваши нужды, а готовые решения, такие как Clearfy Pro, ускорят внедрение в реальных проектах.

Попробуйте внедрить описанные методы на практике — и вы получите мощный инструмент контроля изменений в вашем WordPress-сайте.

Как сделать автоматическое удаление старого контента по типу записи в WordPress
03.04.2026
Как использовать WPCommunity для создания форума на WordPress
10.04.2026
Как отладить ошибки PHP в WordPress на живом сайте
23.01.2026
Создание настройки для изменения заголовка страницы в WordPress через админку
09.01.2026
Как использовать хуки в WordPress: подробное руководство с примерами
26.11.2025