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

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

Почему важно создавать автоматическое обновление плагина

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

Реализовав собственную систему обновлений, вы сможете:

  • Доставлять новые функции и исправления без участия пользователя.
  • Контролировать процесс обновления и обеспечивать совместимость.
  • Повысить доверие к вашему продукту за счёт удобства использования.

Обзор алгоритма автоматического обновления

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

Для этого потребуется:

  1. Создать на сервере JSON-файл или endpoint, который будет возвращать актуальную версию плагина, описание изменений и ссылку для скачивания.
  2. В плагине добавить обработчик, который будет обращаться к этому endpoint через WordPress update API.
  3. Обработать полученные данные, сравнить версии и инициировать обновление, если новая версия доступна.

Реализация сервера обновлений

Пример простого JSON-ответа, который должен возвращать ваш сервер:

{
  "version": "1.2.0",
  "download_url": "https://example.com/plugins/my-plugin.zip",
  "changelog": "Исправлены ошибки, добавлена поддержка PHP 8"
}

Реализуйте этот endpoint на вашем сайте или сервере, убедитесь, что он доступен по HTTPS и быстро отвечает.

Добавление поддержки обновлений в плагине WordPress

В файле главного плагина добавьте следующий код:

add_filter('wp_update_plugins', 'wpdevelop_check_for_updates');

function wpdevelop_check_for_updates($transient) {
    if (empty($transient->checked)) {
        return $transient;
    }

    $remote_url = 'https://example.com/plugin-update.json'; // URL к вашему JSON
    $response = wp_remote_get($remote_url);

    if (is_wp_error($response) || wp_remote_retrieve_response_code($response) != 200) {
        return $transient;
    }

    $data = json_decode(wp_remote_retrieve_body($response));
    if (version_compare($data->version, $transient->checked['my-plugin/my-plugin.php'], '>')) {
        $plugin = new stdClass();
        $plugin->slug = 'my-plugin';
        $plugin->new_version = $data->version;
        $plugin->package = $data->download_url;
        $plugin->url = 'https://example.com';

        $transient->response['my-plugin/my-plugin.php'] = $plugin;
    }

    return $transient;
}

add_filter('plugins_api', 'wpdevelop_plugin_info', 10, 3);

function wpdevelop_plugin_info($res, $action, $args) {
    if ($args->slug !== 'my-plugin') {
        return $res;
    }

    $remote_url = 'https://example.com/plugin-update.json';
    $response = wp_remote_get($remote_url);
    if (is_wp_error($response) || wp_remote_retrieve_response_code($response) != 200) {
        return $res;
    }

    $data = json_decode(wp_remote_retrieve_body($response));

    $res = new stdClass();
    $res->name = 'My Plugin';
    $res->slug = 'my-plugin';
    $res->version = $data->version;
    $res->author = 'WPDevelop';
    $res->homepage = 'https://example.com';
    $res->download_link = $data->download_url;
    $res->sections = [
        'description' => 'Описание плагина и его возможностей.',
        'changelog' => $data->changelog
    ];

    return $res;
}

В данном коде мы создаём фильтры, которые интегрируются с системой обновлений WordPress. Функция wpdevelop_check_for_updates проверяет наличие новой версии и сообщает WordPress о доступном обновлении. Функция wpdevelop_plugin_info возвращает подробную информацию о плагине при запросах в админке.

Советы по безопасности и оптимизации

При реализации автоматических обновлений важно учитывать безопасность:

  • Используйте HTTPS для всех запросов.
  • Проверяйте целостность скачиваемых файлов, например, через хеш-суммы.
  • Ограничьте количество проверок обновлений, чтобы не перегружать сервер (например, не чаще раза в сутки).

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

function wpdevelop_check_for_updates($transient) {
    if (empty($transient->checked)) {
        return $transient;
    }

    $cache = get_transient('wpdevelop_update_check');
    if ($cache !== false) {
        $data = $cache;
    } else {
        $response = wp_remote_get('https://example.com/plugin-update.json');
        if (is_wp_error($response) || wp_remote_retrieve_response_code($response) != 200) {
            return $transient;
        }
        $data = json_decode(wp_remote_retrieve_body($response));
        set_transient('wpdevelop_update_check', $data, 12 * HOUR_IN_SECONDS);
    }

    if (version_compare($data->version, $transient->checked['my-plugin/my-plugin.php'], '>')) {
        $plugin = new stdClass();
        $plugin->slug = 'my-plugin';
        $plugin->new_version = $data->version;
        $plugin->package = $data->download_url;
        $plugin->url = 'https://example.com';

        $transient->response['my-plugin/my-plugin.php'] = $plugin;
    }

    return $transient;
}

Примеры плагинов с автоматическим обновлением

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

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

  • WPRemark — для улучшения взаимодействия с пользователями и контроля над функционалом.
  • ABC Pagination — для продвинутой навигации, которая может пригодиться после обновлений.

Выводы

Автоматическое обновление плагинов — важный элемент удобства и безопасности. Создать собственный механизм вполне реально, используя стандартные хуки WordPress и простой JSON-сервис на стороне сервера. Главное — обеспечить безопасность и стабильность процесса обновления.

Как избежать конфликтов между WooCommerce и плагинами кеширования
21.05.2026
Как создать настройку автоматической отправки email из WPForms в WordPress
25.01.2026
Как создать уникальную форму регистрации в WordPress с дополнительными полями
27.02.2026
Как создать автоматический кеш для REST API в WordPress
11.01.2026
WooCommerce: автоматическое изменение цены и наличия товара по расписанию
26.07.2026