При разработке плагинов или тем для WordPress важно вести подробный журнал изменений (changelog). Это помогает отслеживать правки, исправления ошибок и новые возможности, а также информировать пользователей о том, что изменилось в новых версиях. В этой статье мы рассмотрим, как организовать автоматическое сохранение changelog непосредственно в WordPress с помощью кода и плагинов, чтобы процесс был максимально удобным и не требовал ручного обновления.
Почему автоматическое сохранение changelog важно для разработчиков WordPress
Ведение changelog — не просто формальность. Во-первых, это повышает доверие пользователей к вашему продукту, во-вторых, облегчает поддержку и отладку, особенно если проект развивается в команде. Автоматизация этого процесса экономит время, снижает вероятность ошибок и забытых правок.
Кроме того, многие репозитории плагинов и тем требуют наличие актуального changelog в readme-файле. Если обновления выходят часто, поддерживать его вручную становится сложно.
Основные задачи автоматизации changelog
- Сбор информации о внесённых изменениях (commit-сообщения, теги версии и т.д.).
- Форматирование changelog в читаемый вид.
- Обновление файла readme.txt или отдельного документа changelog.md.
- Возможность интеграции с системами контроля версий (Git) и CI/CD.
Реализация автоматического сохранения changelog с использованием Git и PHP
Один из самых практичных способов — использовать Git для фиксации изменений и парсить коммиты с определёнными тегами. Далее на основе этих данных формируется changelog, который записывается в файл.
Пример функции, которая может быть интегрирована в ваш плагин или тему для генерации changelog из Git-коммитов:
function wpmy_generate_changelog() {
$output = [];
// Команда git для получения сообщений коммитов с тегами релизов
exec('git log --pretty=format:"%h %s" --no-merges', $output);
$changelog = "# Changelog\n\n";
foreach ($output as $line) {
// Фильтруем по ключевым словам, например, "feat", "fix", "update"
if (preg_match('/\b(feat|fix|update|refactor)\b/i', $line)) {
$changelog .= "- " . $line . "\n";
}
}
// Сохраняем в файл changelog.md в корне плагина
file_put_contents(plugin_dir_path(__FILE__) . 'changelog.md', $changelog);
}
Эту функцию можно запускать вручную при подготовке релиза или настроить через хук WordPress, например, при обновлении версии плагина.
Интеграция с хуком обновления плагина
Добавим вызов генерации changelog при обновлении версии плагина в WordPress:
add_action('upgrader_process_complete', 'wpmy_updater_changelog', 10, 2);
function wpmy_updater_changelog($upgrader, $options) {
if ($options['action'] == 'update' && $options['type'] == 'plugin') {
// Проверяем обновление конкретного плагина
if (isset($options['plugins']) && in_array(plugin_basename(__FILE__), $options['plugins'])) {
wpmy_generate_changelog();
}
}
}
Такой подход автоматизирует обновление changelog при каждом обновлении плагина.
Использование плагинов для автоматизации changelog в WordPress
Если вы предпочитаете готовые решения, стоит обратить внимание на плагины, которые помогают управлять changelog:
- WP Changelog — простой плагин для отображения и управления журналом изменений прямо в админке.
- VersionPress — более продвинутый инструмент с контролем версий и возможностью отката изменений.
- GitHub Changelog Generator — интеграция с GitHub для автоматического создания changelog на основе релизов и pull request'ов (нужна настройка с внешними инструментами).
Для интеграции с WPMy и плагинами с WPSHOP.ru можно расширить функциональность, добавив вызов генерации changelog при публикации новых версий через их API.
Практические советы по ведению changelog
Чтобы changelog был полезным и удобным, придерживайтесь следующих правил:
- Стандартизируйте формат сообщений коммитов. Используйте соглашения типа Conventional Commits (feat, fix, docs и т.д.).
- Обновляйте changelog регулярно. Не откладывайте — автоматизация поможет.
- Делайте changelog понятным для пользователя. Избегайте технического жаргона, если changelog предназначен для конечных пользователей.
- Храните changelog рядом с кодом. Это облегчает доступ и поддержку.
Пример форматирования changelog.md
# Changelog
## [1.2.0] - 2024-06-01
### Added
- Добавлена поддержка REST API для новых эндпоинтов
### Fixed
- Исправлена ошибка с кешированием данных
### Changed
- Обновлены стили для админки
Такой формат легко читается и воспринимается как разработчиками, так и пользователями.