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

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

Почему важно сохранять changelog обновлений плагинов и тем

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

WordPress не сохраняет changelog автоматически, поэтому полезно иметь собственный инструмент, который будет фиксировать эти данные и сохранять их в базе данных или в отдельных файлах.

Обзор решения: как работает плагин для сохранения changelog

Основная идея плагина — отследить событие обновления плагина или темы и получить changelog из источника обновления. Обычно changelog хранится в readme.txt плагина или темы, а также доступен на официальном репозиторие WordPress. Наш плагин будет перехватывать событие обновления, получать changelog и сохранять его в кастомную таблицу базы данных, чтобы потом можно было просмотреть историю изменений через админ-панель.

Основные этапы разработки плагина

  • Создание структуры плагина и регистрация хуков обновления.
  • Получение информации о новом обновлении и извлечение changelog.
  • Сохранение changelog в базе данных.
  • Создание интерфейса в админке для просмотра истории.

Регистрация хуков для отслеживания обновлений плагинов и тем

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

Пример регистрации хука в нашем плагине wpeditor_save_changelog:

add_action('upgrader_process_complete', 'wpeditor_save_changelog_on_update', 10, 2);

Функция wpeditor_save_changelog_on_update будет получать объект обновления и данные обновления, по которым можно определить, что именно обновилось — плагин или тема.

Пример функции обработки обновления

function wpeditor_save_changelog_on_update($upgrader_object, $options) {
    if ($options['action'] == 'update' && ($options['type'] == 'plugin' || $options['type'] == 'theme')) {
        $items = $options['plugins'] ?? $options['themes'] ?? [];
        foreach ($items as $item) {
            // Получаем changelog и сохраняем
            wpeditor_save_changelog($item, $options['type']);
        }
    }
}

В этой функции мы проверяем тип обновления и для каждого обновленного плагина или темы вызываем функцию сохранения changelog.

Получение changelog из репозитория WordPress

В репозитории WordPress changelog обычно хранится в разделе readme.txt плагина или темы. Мы можем получить содержимое этого файла через API WordPress.org и извлечь раздел changelog.

Для примера рассмотрим получение changelog плагина через API:

function wpeditor_get_changelog_from_wporg($slug, $type = 'plugin') {
    $api_url = $type === 'plugin' 
        ? 'https://api.wordpress.org/plugins/info/1.0/' . $slug . '.json' 
        : 'https://api.wordpress.org/themes/info/1.0/' . $slug . '.json';
    
    $response = wp_remote_get($api_url);
    if (is_wp_error($response)) return false;
    
    $data = json_decode(wp_remote_retrieve_body($response));
    if (!$data) return false;
    
    return $data->changelog ?? false;
}

Эта функция обращается к API WordPress.org, получает JSON с информацией и возвращает changelog. Если changelog отсутствует, возвращается false.

Сохранение changelog в базе данных

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

function wpeditor_save_changelog_install() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpeditor_changelogs';
    
    $charset_collate = $wpdb->get_charset_collate();
    
    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
        slug VARCHAR(255) NOT NULL,
        type VARCHAR(20) NOT NULL,
        changelog LONGTEXT NOT NULL,
        updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY (id),
        KEY slug_type (slug, type)
    ) $charset_collate;";
    
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'wpeditor_save_changelog_install');

После создания таблицы реализуем функцию для сохранения changelog:

function wpeditor_save_changelog($slug, $type) {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpeditor_changelogs';
    
    $changelog = wpeditor_get_changelog_from_wporg($slug, $type);
    if (!$changelog) return;
    
    $wpdb->replace(
        $table_name,
        [
            'slug' => $slug,
            'type' => $type,
            'changelog' => $changelog,
            'updated_at' => current_time('mysql')
        ],
        ['%s', '%s', '%s', '%s']
    );
}

Создание интерфейса для просмотра changelog в админке WordPress

Чтобы удобно просматривать сохраненные changelog, добавим страницу в меню админки. Для этого используем хук admin_menu:

add_action('admin_menu', 'wpeditor_changelog_admin_menu');

function wpeditor_changelog_admin_menu() {
    add_menu_page(
        'Changelog WPEditor',
        'Changelog WPEditor',
        'manage_options',
        'wpeditor-changelog',
        'wpeditor_changelog_page',
        'dashicons-update',
        80
    );
}

function wpeditor_changelog_page() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'wpeditor_changelogs';
    $results = $wpdb->get_results("SELECT * FROM $table_name ORDER BY updated_at DESC");
    
    echo '<div class="wrap"><h1>История изменений (Changelog) обновленных плагинов и тем</h1>';
    if (!$results) {
        echo '<p>Changelog не найден.</p>';
    } else {
        foreach ($results as $row) {
            echo '<h2>' . esc_html($row->slug) . ' (' . esc_html($row->type) . ')</h2>';
            echo '<pre style="background:#f5f5f5; padding:10px; border:1px solid #ddd; white-space: pre-wrap;">' . esc_html($row->changelog) . '</pre>';
            echo '<hr>';
        }
    }
    echo '</div>';
}

Расширения и улучшения плагина

Данный базовый плагин можно улучшить следующими способами:

  • Добавить фильтрацию по плагинам и темам.
  • Отправлять уведомления администратору при появлении новых changelog.
  • Сохранять changelog в формате Markdown и отображать его с форматированием.
  • Кэшировать changelog для уменьшения количества запросов к API WordPress.org.

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

Выводы

Создание плагина для автоматического сохранения changelog — полезная задача для профессионального администрирования WordPress-сайтов. Такой инструмент помогает контролировать изменения, быстро реагировать на возможные проблемы после обновлений и вести историю изменений в удобном виде.

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как автоматизировать создание и обновление панорамных галерей в WordPress
12.03.2026
Как автоматизировать обновление transient в WordPress: практическое руководство
28.03.2026
Как настроить автоматический импорт товаров в WordPress: пошаговое руководство
26.11.2025
Как автоматизировать обновление метаданных в WordPress
01.03.2026
Автоматическое отключение неиспользуемых плагинов в WordPress
01.02.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше