В процессе разработки и поддержки сайта на WordPress часто возникает необходимость контролировать версии файлов темы. Это особенно актуально, если вы работаете в команде или хотите отслеживать изменения для быстрого отката при ошибках. В этой статье мы рассмотрим, как реализовать автоматический контроль версий файлов темы WordPress с помощью простого плагина и практических решений.
Почему важен контроль версий файлов темы WordPress
Контроль версий — это система, которая позволяет отслеживать изменения в файлах, видеть, кто и когда вносил правки, а также при необходимости возвращаться к предыдущим версиям. В WordPress контроль версий особенно важен для:
- Минимизации рисков при обновлениях темы;
- Отладки и быстрого устранения ошибок;
- Организации командной работы;
- Обеспечения безопасности и сохранности кода.
Автоматический контроль версий с помощью плагина — обзор решения
Мы создадим плагин wpbook_version_control, который при каждом изменении файла темы будет сохранять его копию с отметкой времени. Такой подход позволит быстро восстановить нужную версию без необходимости подключения к Git или другим системам.
Основные возможности плагина:
- Отслеживание изменений PHP, CSS, JS и других файлов темы;
- Хранение резервных копий в папке
/wp-content/uploads/wpbook-version-control/с маркировкой времени; - Интерфейс в админке для просмотра и восстановления файлов;
- Автоматическое удаление резервных копий старше заданного срока для экономии места.
Создание плагина для автоматического контроля версий
Начнем с создания базового файла плагина wpbook-version-control.php в папке /wp-content/plugins/wpbook-version-control/:
<?php
/**
* Plugin Name: WPBook Version Control
* Description: Автоматический контроль версий файлов темы WordPress.
* Version: 1.0
* Author: WPBook
*/
// Хук для отслеживания изменения файлов темы
add_action('save_post', 'wpbook_version_control_save_post');
function wpbook_version_control_save_post($post_id) {
// Проверяем, что это не автосохранение
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// Получаем путь к активной теме
$theme_dir = get_template_directory();
// Папка для хранения версий
$backup_dir = wp_upload_dir()['basedir'] . '/wpbook-version-control';
if (!file_exists($backup_dir)) {
wp_mkdir_p($backup_dir);
}
// Получаем список файлов темы (например, PHP и CSS)
$files = wpbook_version_control_get_theme_files($theme_dir);
foreach ($files as $file) {
wpbook_version_control_backup_file($file, $backup_dir);
}
}
// Функция для получения файлов темы
function wpbook_version_control_get_theme_files($dir) {
$files = [];
$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($rii as $file) {
if ($file->isDir()){
continue;
}
$ext = pathinfo($file->getFilename(), PATHINFO_EXTENSION);
if (in_array($ext, ['php', 'css', 'js'])) {
$files[] = $file->getPathname();
}
}
return $files;
}
// Функция создания резервной копии файла
function wpbook_version_control_backup_file($file_path, $backup_dir) {
$time = date('Ymd-His');
$relative_path = str_replace(get_template_directory() . '/', '', $file_path);
$backup_path = $backup_dir . '/' . str_replace('/', '_', $relative_path) . "_{$time}";
if (file_exists($file_path)) {
copy($file_path, $backup_path);
}
}
Этот код при сохранении записи в WordPress автоматически создает резервные копии файлов темы (PHP, CSS, JS). Мы используем хук save_post, чтобы сработать при сохранении, но для полного охвата можно добавить и другие хуки или настроить крон-задачи.
Оптимизация и расширение плагина
Чтобы плагин был удобнее и не занимал слишком много места, стоит добавить функции:
- Автоматическое удаление резервных копий старше 30 дней;
- Интерфейс отображения резервных копий в админке;
- Возможность восстановить файл из резервной копии;
- Логирование действий для отслеживания изменений.
function wpbook_version_control_cleanup_backups() {
$backup_dir = wp_upload_dir()['basedir'] . '/wpbook-version-control';
if (!file_exists($backup_dir)) {
return;
}
$files = glob($backup_dir . '/*');
$now = time();
foreach ($files as $file) {
if (is_file($file)) {
if ($now - filemtime($file) > 30 * DAY_IN_SECONDS) {
unlink($file);
}
}
}
}
// Запускаем очистку при загрузке админки
add_action('admin_init', 'wpbook_version_control_cleanup_backups');
Примеры плагинов для расширенного контроля версий и бэкапов
Если не хотите писать собственный плагин, обратите внимание на уже готовые решения, которые могут помочь с контролем версий и бэкапами:
- Clearfy Pro — плагин для оптимизации и безопасности, включает функции автоматического бэкапа и очистки;
- Expert Review — позволяет делать ревью кода, что помогает при командной разработке;
- My Popup — для уведомлений, можно использовать для оповещений о новых версиях.
Как интегрировать контроль версий с системой деплоя
Для продвинутых проектов стоит подумать о интеграции такого контроля с системой деплоя — например, через GitHub Actions или Bitbucket Pipelines. Тогда резервные копии будут сохраняться не только локально, но и в удаленном репозитории, что значительно повышает надежность.
Пример простого скрипта для деплоя с использованием WP-CLI, который можно запускать после коммита:
wp theme update mytheme --version=1.2.3
Или можно настроить автоматическую выгрузку файлов темы с помощью rsync на сервер при каждом обновлении в репозитории.
Выводы и рекомендации
Автоматический контроль версий файлов темы — важный инструмент для поддержания качества и безопасности сайта на WordPress. Даже простой плагин, описанный в статье, способен значительно облегчить жизнь разработчикам и администраторам.
Рассмотрите возможность использования готовых решений с WPShop и интеграции с внешними системами контроля версий для максимального комфорта и надежности.