В процессе разработки собственных тем и плагинов для WordPress рано или поздно возникает необходимость автоматизировать процессы обновления. Это особенно актуально, если вы распространяете свои продукты среди пользователей, которым нужно быстро и безопасно получать новые версии. В этой статье мы разберём, как организовать автоматическое создание и распространение обновлений для тем и плагинов WordPress с помощью собственного API, а также рассмотрим примеры кода и лучшие практики.
Почему важно автоматизировать обновления тем и плагинов WordPress
Обновления — это не только новые функции, но и исправление ошибок и уязвимостей безопасности. Если пользователи долго не обновляют продукты, это может привести к проблемам с совместимостью и безопасности. Автоматизация обновлений позволяет:
- Сократить время на распространение новых версий;
- Обеспечить своевременное получение исправлений;
- Упростить поддержку пользователей;
- Повысить лояльность клиентов за счёт удобства.
Для публичных тем и плагинов в репозитории WordPress.org обновления поставляются автоматически. Но для кастомных или коммерческих продуктов нужен собственный механизм, который будем реализовывать.
Создание API для проверки обновлений
Первый шаг — создать серверный API, который будет отдавать информацию о последних версиях ваших тем или плагинов. Обычно это REST API, который возвращает JSON с необходимыми данными.
Пример простого API на PHP:
<?php
// update-api.php
header('Content-Type: application/json');
// Данные о последней версии
$updates = [
'my-plugin' => [
'version' => '1.2.3',
'download_url' => 'https://example.com/downloads/my-plugin-1.2.3.zip',
'changelog' => 'Исправлены ошибки и добавлены новые функции',
],
'my-theme' => [
'version' => '2.0.1',
'download_url' => 'https://example.com/downloads/my-theme-2.0.1.zip',
'changelog' => 'Обновлён дизайн и улучшена производительность',
],
];
// Получаем slug из запроса
$slug = $_GET['slug'] ?? '';
if (isset($updates[$slug])) {
echo json_encode($updates[$slug]);
} else {
echo json_encode(['error' => 'Not found']);
}
?>Этот скрипт принимает параметр slug и возвращает информацию о последней версии. Далее этот API будет использоваться в коде темы или плагина для проверки обновлений.
Реализация проверки обновлений в плагине WordPress
Для интеграции с WordPress необходимо перехватить запросы системы обновлений и добавить свою логику проверки.
Основные хуки для этого — site_transient_update_plugins и plugins_api. Ниже пример функции, которая проверяет обновления по нашему API:
function wpmanual_check_plugin_update($transient) {
if (empty($transient->checked)) {
return $transient;
}
// Путь к плагину
$plugin_slug = 'my-plugin/my-plugin.php';
$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_slug);
$current_version = $plugin_data['Version'];
$response = wp_remote_get('https://example.com/update-api.php?slug=my-plugin');
if (is_wp_error($response)) {
return $transient;
}
$data = json_decode(wp_remote_retrieve_body($response));
if (!$data || !isset($data->version)) {
return $transient;
}
if (version_compare($data->version, $current_version, '>')) {
$obj = new stdClass();
$obj->slug = 'my-plugin';
$obj->new_version = $data->version;
$obj->url = 'https://example.com/my-plugin-info';
$obj->package = $data->download_url;
$transient->response[$plugin_slug] = $obj;
}
return $transient;
}
add_filter('site_transient_update_plugins', 'wpmanual_check_plugin_update');Этот код добавляет информацию о новой версии в стандартный список обновлений WordPress. Пользователь увидит уведомление и сможет обновить плагин напрямую из админки.
Обработка подробной информации о плагине
Для вывода информации на странице обновлений используется хук plugins_api. Пример:
function wpmanual_plugin_api_handler($res, $action, $args) {
if ($args->slug !== 'my-plugin') {
return $res;
}
if ($action === 'plugin_information') {
$response = wp_remote_get('https://example.com/update-api.php?slug=my-plugin');
if (is_wp_error($response)) {
return $res;
}
$data = json_decode(wp_remote_retrieve_body($response));
if (!$data) {
return $res;
}
$res = new stdClass();
$res->name = 'My Plugin';
$res->slug = 'my-plugin';
$res->version = $data->version;
$res->author = 'WPManual.ru';
$res->homepage = 'https://example.com/my-plugin-info';
$res->download_link = $data->download_url;
$res->sections = [
'description' => 'Описание плагина',
'changelog' => $data->changelog,
];
return $res;
}
return $res;
}
add_filter('plugins_api', 'wpmanual_plugin_api_handler', 10, 3);Автоматизация сборки и упаковки обновлений
Чтобы обновления были доступны для загрузки, нужно подготовить архивы с новыми версиями. Для автоматизации этого процесса можно использовать скрипты на Bash, Composer, или CI/CD-системы (GitHub Actions, GitLab CI и др.).
Пример простого bash-скрипта для архивации плагина:
#!/bin/bash
PLUGIN_NAME=my-plugin
VERSION=1.2.3
ZIP_NAME=$PLUGIN_NAME-$VERSION.zip
# Удаляем старый архив
rm -f $ZIP_NAME
# Создаём архив из папки плагина
zip -r $ZIP_NAME $PLUGIN_NAME/ -x "*.git*" "*.DS_Store"
echo "Архив $ZIP_NAME создан."Такой скрипт можно запускать вручную или интегрировать в процесс сборки на сервере, чтобы архив автоматически обновлялся при новой версии.
Рекомендации по безопасности и производительности
При организации собственного механизма обновлений важно учитывать:
- Используйте HTTPS для всех запросов к API и загрузки файлов;
- Проверяйте подписи или хэши загружаемых архивов для предотвращения подмены;
- Ограничивайте доступ к API, если обновления платные или приватные;
- Кэшируйте результаты запросов к API для снижения нагрузки;
- Тестируйте обновления на тестовой среде перед распространением;
- Обрабатывайте ошибки соединения и обеспечивайте fallback.
Использование плагина Clearfy для оптимизации процесса обновлений
Плагин Clearfy помогает управлять производительностью и безопасностью WordPress, включая оптимизацию системных запросов. Его можно использовать совместно с собственным механизмом обновлений для улучшения работы сайта при проверке и загрузке обновлений.
Заключение
Автоматизация создания и распространения обновлений для собственных тем и плагинов WordPress — важный шаг для профессионального разработчика. Правильно реализованный механизм не только упрощает поддержку, но и повышает безопасность и удобство пользователей. Следуя приведённым рекомендациям и примерам кода, вы сможете настроить собственный API обновлений и интегрировать его с WordPress без использования сторонних сервисов.
Дополнительно рекомендуем изучить возможности плагина Expert Review для автоматизации тестирования и контроля качества создаваемых продуктов.