Как решить проблему активации лицензии WordPress плагина при использовании Redis кеширования

Диагностика проблемы: почему Redis мешает активации лицензий

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

Признаки проблемы:

  • Лицензия не активируется, хотя ключ введён верно;
  • Сайт не получает обновления статуса лицензии после её отзыва;
  • На странице активации отображается ошибка проверки, связанная с кешем;
  • Логи сервера показывают, что запросы к лицензионному серверу не отправляются.

Пошаговое решение проблемы с Redis и активацией лицензий

1. Определение кешируемых запросов

Чаще всего лицензия проверяется через HTTP-запросы c помощью wp_remote_get или wp_remote_post, а результаты сохраняются в transient или объектный кеш. Необходимо найти, какие transient-ключи или кеш-ключи Redis используются для хранения результатов проверки.

2. Исключение transient из кеша Redis

Если вы используете плагин Redis Object Cache, добавьте фильтр, чтобы исключить transient, связанные с лицензиями, из кеша Redis. Например:

add_filter('redis_object_cache_transient_blacklist', function($blacklist) {
    $blacklist[] = 'license_check'; // ключ или часть ключа transient
    return $blacklist;
});

В зависимости от конкретного плагина лицензирования замените 'license_check' на ваши ключи transient.

3. Отключение кеширования для запросов API лицензии

Если плагин использует HTTP-запросы с кешированием, убедитесь, что они идут без кеша. Можно добавить фильтр для pre_http_request, возвращающий false при запросах на лицензионный сервер:

add_filter('pre_http_request', function($pre, $args, $url) {
    if (strpos($url, 'license-server-domain.com') !== false) {
        return false; // Отключить кеширование для лицензии
    }
    return $pre;
}, 10, 3);

4. Очистка Redis кеша

После внесения изменений обязательно очистите кеш Redis, чтобы убедиться, что устаревшие данные удалены:

redis-cli flushall

Или через SSH консоль сервера или панель управления хостингом.

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

  • Выполните активацию лицензии в админке плагина;
  • Проверьте, что статус лицензии обновился и лицензия активна;
  • В логах сервера или отладочном режиме (WP_DEBUG) убедитесь, что запросы к лицензионному серверу проходят;
  • Запустите повторную проверку лицензии, чтобы убедиться, что данные не берутся из кеша Redis;
  • Убедитесь, что нет ошибок кеширования в консоли браузера и в логах PHP.

Частые ошибки и как их исправить

Ошибка 1: Кеширование ключей transient не отключено полностью

Решение: Проверьте, что фильтр для исключения transient срабатывает и что ключи совпадают с теми, что реально используются плагином. Для отладки можно вывести все transient в базе данных:

global $wpdb;
$results = $wpdb->get_results("SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE '_transient_%'");
foreach ($results as $row) {
    error_log($row->option_name);
}

Ошибка 2: Кеширование HTTP-запросов не отключено

Решение: Используйте pre_http_request для отключения кеширования именно для URL лицензионного сервера. Проверьте URL лицензии и корректно пропишите условие.

Ошибка 3: Не очищен кеш Redis после внесения изменений

Решение: Выполните команду flushall или очистите кеш через панель. Иногда требуется перезапустить сервис Redis.

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

  • Не отключайте весь кеш Redis целиком — это снизит производительность сайта.
  • Ограничьте кеширование только для transient, связанных с лицензиями, чтобы сохранить эффективность кеша.
  • Настройте мониторинг ошибок лицензий и кеша, чтобы оперативно реагировать на проблемы.
  • Используйте WP-Cron для периодической очистки устаревших transient, связанных с лицензиями.

Сравнение решений для работы с кешем лицензий и Redis

ПодходОписаниеПлюсыМинусы
Исключение transient лицензий из кеша RedisДобавление transient в blacklist Redis кешаСохраняет кеш для всего сайта, решает проблему лицензийТребует точного определения ключей transient
Отключение кеширования HTTP-запросов лицензииФильтр pre_http_request для отмены кешаПрямой контроль запросов, предотвращает кеширование нежелательных запросовНужно знать точные URL для проверки
Полное отключение RedisОтключение плагина Redis Object CacheМаксимальная простота, решает проблему кардинальноСнижает производительность сайта
Решение проблем с активацией лицензий WordPress плагинов при использовании разных средств кеширования
31.07.2026
Решение проблем с активацией лицензий WooCommerce после смены домена
21.05.2026
Решение проблем с активацией лицензий WordPress плагинов при использовании разных средств кеширования
28.07.2026
Как отключить автоматические обновления WordPress
14.03.2026
Решение проблем с проверкой лицензии в WooCommerce плагинах WordPress
25.04.2026