Решение проблем с автообновлениями WooCommerce плагинов при активации лицензий

Диагностика проблем с автообновлениями в WooCommerce плагинах

Часто после добавления системы активации лицензий в WooCommerce плагины возникают ошибки с автообновлениями. Признаки:

  • Обновления плагина не появляются в админке WordPress;
  • При попытке обновления появляется ошибка «Invalid license» или «License expired»;
  • Автообновление происходит, но плагин деактивируется после обновления;
  • В логах сервера или WordPress debug видны ошибки взаимодействия с лицензионным сервером.

Основные причины:

  • Неправильная реализация проверки лицензии в хуках автообновления;
  • Отсутствие или неверная обработка HTTP-запросов к лицензионному серверу;
  • Проблемы с кешированием результатов проверки лицензии;
  • Несоответствие версии API лицензирования и версии плагина.

Пошаговое решение проблем с автообновлениями WooCommerce и лицензиями

1. Корректная интеграция с системой автообновлений WordPress

Для управления автообновлениями в WordPress плагинах с лицензиями нужно использовать фильтр site_transient_update_plugins и хук plugins_api. Пример базовой реализации проверки лицензии при автообновлении:

add_filter('site_transient_update_plugins', 'check_plugin_license_for_updates');
function check_plugin_license_for_updates($transient) {
    if (empty($transient->checked)) {
        return $transient;
    }

    $license_key = get_option('my_plugin_license_key');
    $response = wp_remote_post('https://license-server.example.com/api/check', [
        'body' => [
            'license_key' => $license_key,
            'plugin_slug' => 'my-plugin-slug',
            'version' => '1.0.0'
        ]
    ]);

    if (is_wp_error($response)) {
        return $transient; // не блокируем обновления при ошибке связи
    }

    $data = json_decode(wp_remote_retrieve_body($response));
    if ($data->valid) {
        $plugin_file = 'my-plugin/my-plugin.php';
        if (version_compare($data->new_version, $transient->checked[$plugin_file], '>')) {
            $transient->response[$plugin_file] = (object) [
                'slug' => 'my-plugin',
                'new_version' => $data->new_version,
                'url' => 'https://example.com/my-plugin',
                'package' => $data->package_url
            ];
        }
    }

    return $transient;
}

2. Обработка запроса информации о плагине

Хук plugins_api отвечает за показ информации о плагине в админке. Необходимо проверять лицензию и возвращать актуальные данные:

add_filter('plugins_api', 'my_plugin_plugins_api', 10, 3);
function my_plugin_plugins_api($res, $action, $args) {
    if ($args->slug !== 'my-plugin') {
        return $res;
    }

    $license_key = get_option('my_plugin_license_key');
    $response = wp_remote_post('https://license-server.example.com/api/info', [
        'body' => ['license_key' => $license_key]
    ]);

    if (is_wp_error($response)) {
        return $res;
    }

    $data = json_decode(wp_remote_retrieve_body($response));
    if (!$data->valid) {
        return new WP_Error('license_invalid', 'License invalid or expired');
    }

    $res = (object) [
        'name' => 'My Plugin',
        'slug' => 'my-plugin',
        'version' => $data->new_version,
        'author' => 'My Company',
        'homepage' => 'https://example.com/my-plugin',
        'download_link' => $data->package_url,
        'sections' => [
            'description' => $data->description
        ]
    ];
    return $res;
}

Проверка результата после внедрения

  • В админке WordPress в разделе «Обновления» появляется новая версия плагина;
  • Обновление плагина проходит без ошибок, плагин остается активным;
  • В логах ошибок WordPress отсутствуют ошибки, связанные с лицензией;
  • Проверка лицензии через REST API или UI лицензионного сервера возвращает статус "valid" без ошибок.

Частые ошибки и способы их исправления

  • Ошибка: Автообновление не появляется — проверьте, вызывается ли фильтр site_transient_update_plugins и правильно ли указаны пути к файлам плагина.
  • Ошибка: Плагин деактивируется после обновления — проверьте, что проверка лицензии не блокирует установку обновления при временных ошибках сети.
  • Ошибка: Ошибки HTTP при обращении к лицензионному серверу — проверьте SSL-сертификат и timeout запроса в wp_remote_post.
  • Ошибка: Несовпадение версий API — синхронизируйте версию API на сервере лицензий и в плагине.

Практические советы по безопасности и производительности

  • Кешируйте результаты проверки лицензии на 10-15 минут, чтобы не перегружать лицензионный сервер.
  • Используйте безопасное соединение HTTPS для всех запросов к серверу лицензий.
  • Обрабатывайте ошибки сети аккуратно, чтобы не блокировать обновления из-за временных проблем.
  • Логируйте запросы к лицензионному серверу для отладки и анализа проблем.

Сравнение способов реализации автообновлений с лицензиями

МетодОписаниеПлюсыМинусы
Фильтр site_transient_update_plugins + plugins_apiСтандартный способ, интеграция с ядром WPГибкость, контроль, работает с любыми плагинамиТребует дополнительной реализации серверной части
Использование плагинов автообновления (например Easy Updates Manager)Готовые решения для управления обновлениямиПростота настройкиМожет конфликтовать с лицензиями, меньше гибкости
Встроенные автообновления WooCommerce с подпискамиИспользование стандартных механизмов WooCommerceИнтеграция с подписками и лицензиямиОграничение по кастомизации, требует WooCommerce
Как удалить неактивные лицензии WordPress плагинов из базы данных
24.03.2026
Как сделать автоматический отзыв лицензии в WordPress плагине
14.12.2025
Решение проблем с автообновлениями WooCommerce плагинов при активации лицензий
07.05.2026
Решение проблем с проверкой лицензии в WooCommerce плагинах WordPress
25.04.2026
Как защитить WordPress от взломов: низкочастотные методы и практические решения
23.11.2025