Как создать плагин для контроля изменений в WordPress

Зачем нужен плагин для контроля изменений в WordPress

Ведение точного учёта изменений на сайте — важная задача для администраторов и разработчиков. Это помогает быстро выявлять причины возможных проблем, отслеживать действия пользователей и анализировать, какие изменения были внесены в контент или настройки. Особенно это важно для крупных проектов с несколькими редакторами и администраторами.

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

Основные задачи плагина контроля изменений

Плагин должен фиксировать ключевые события, такие как:

  • Создание, обновление и удаление записей и страниц.
  • Изменения в пользовательских метаданных и настройках.
  • Авторизацию и действия пользователей с правами администратора и редактора.

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

Создание структуры плагина

Начнём с создания базового файла плагина wpapp-change-tracker.php в папке wp-content/plugins/wpapp-change-tracker:

<?php
/**
 * Plugin Name: WPApp Change Tracker
 * Description: Плагин для контроля и логирования изменений на сайте WordPress
 * Version: 1.0
 * Author: WPApp.ru
 */

// Защита от прямого запуска файла
if (!defined('ABSPATH')) {
    exit;
}

// Подключение основных функций
require_once plugin_dir_path(__FILE__) . 'includes/wpapp-change-tracker-functions.php';

Создайте папку includes и файл wpapp-change-tracker-functions.php для основной логики.

Логирование изменений записей и страниц

Для отслеживания изменений публикаций используем хуки WordPress save_post и before_delete_post. В файле wpapp-change-tracker-functions.php добавим следующий код:

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

    $user = wp_get_current_user();
    $action = $update ? 'Обновление' : 'Создание';
    $message = sprintf('%s записи: ID %d, заголовок "%s", автор: %s', $action, $post_id, $post->post_title, $user->user_login);

    wpappct_write_log($message);
}
add_action('save_post', 'wpappct_log_post_change', 10, 3);

function wpappct_log_post_delete($post_id) {
    $user = wp_get_current_user();
    $message = sprintf('Удаление записи: ID %d, автор: %s', $post_id, $user->user_login);
    wpappct_write_log($message);
}
add_action('before_delete_post', 'wpappct_log_post_delete');

function wpappct_write_log($message) {
    global $wpdb;
    $table = $wpdb->prefix . 'wpapp_changes_log';

    $wpdb->insert(
        $table,
        [
            'time' => current_time('mysql'),
            'message' => $message
        ],
        ['%s', '%s']
    );
}

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

Создание таблицы для хранения логов

Для хранения лога создадим отдельную таблицу при активации плагина. Добавьте в основной файл плагина следующий код:

register_activation_hook(__FILE__, 'wpappct_create_table');

function wpappct_create_table() {
    global $wpdb;
    $table = $wpdb->prefix . 'wpapp_changes_log';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE IF NOT EXISTS $table (
        id BIGINT(20) NOT NULL AUTO_INCREMENT,
        time DATETIME NOT NULL,
        message TEXT NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}

Теперь плагин сможет сохранять записи о событиях в базе.

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

Кроме записей, часто важно контролировать изменения метаданных, например, пользовательских полей. Для этого можно использовать фильтры update_post_meta и update_user_meta. Добавим в wpapp-change-tracker-functions.php:

function wpappct_log_post_meta_update($meta_id, $post_id, $meta_key, $_meta_value) {
    $user = wp_get_current_user();
    $message = sprintf('Обновление мета-поля "%s" записи ID %d пользователем %s', $meta_key, $post_id, $user->user_login);
    wpappct_write_log($message);
}
add_action('updated_postmeta', 'wpappct_log_post_meta_update', 10, 4);

function wpappct_log_user_meta_update($meta_id, $user_id, $meta_key, $_meta_value) {
    $user = wp_get_current_user();
    $message = sprintf('Обновление мета-поля "%s" пользователя ID %d администратором %s', $meta_key, $user_id, $user->user_login);
    wpappct_write_log($message);
}
add_action('updated_usermeta', 'wpappct_log_user_meta_update', 10, 4);

Так мы расширяем зону контроля и фиксируем важные изменения.

Создание страницы с журналом изменений в админке WordPress

Чтобы просматривать лог прямо в панели администратора, добавим меню и страницу с таблицей последних событий. В основном файле плагина добавьте:

add_action('admin_menu', 'wpappct_add_admin_page');

function wpappct_add_admin_page() {
    add_menu_page(
        'Журнал изменений WPApp',
        'Журнал изменений',
        'manage_options',
        'wpapp-change-tracker',
        'wpappct_render_admin_page',
        'dashicons-list-view',
        100
    );
}

function wpappct_render_admin_page() {
    global $wpdb;
    $table = $wpdb->prefix . 'wpapp_changes_log';
    $results = $wpdb->get_results("SELECT * FROM $table ORDER BY time DESC LIMIT 50");

    echo '<div class="wrap">';
    echo '<h1>Журнал изменений WPApp</h1>';
    echo '<table class="wp-list-table widefat fixed striped">';
    echo '<thead><tr><th>Время</th><th>Сообщение</th></tr></thead>';
    echo '<tbody>';
    foreach ($results as $row) {
        echo '<tr><td>' . esc_html($row->time) . '</td><td>' . esc_html($row->message) . '</td></tr>';
    }
    echo '</tbody></table>';
    echo '</div>';
}

Теперь в меню появится пункт «Журнал изменений», где можно увидеть последние изменения на сайте.

Советы по расширению и безопасности

Для продвинутого использования можно добавить:

  • Фильтрацию и поиск по журналу изменений.
  • Отправку уведомлений на email при критических изменениях.
  • Логирование изменений настроек плагинов и темы.
  • Реализацию архивирования и очистки старых записей лога.

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

Примеры готовых решений и плагинов

Если не хотите писать собственный код, можно обратить внимание на популярные плагины для аудита и логирования:

  • Clearfy Pro — многофункциональный плагин с возможностями оптимизации и контроля.
  • Expert Review — для организации отзывов и контроля изменений пользовательских данных.

Однако собственный плагин даёт гибкость и понимание, что происходит в системе.

Наш каталог плагинов WordPress