Как автоматизировать проверку лицензий WordPress плагинов с помощью WP-Cron

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

Почему автоматизация проверки лицензий важна

Если проверять лицензии плагинов вручную или только при закрытии/открытии админки, есть риск, что пользователь будет использовать плагин с истекшим сроком или с отозванной лицензией. Автоматическая периодическая проверка помогает:

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

Рассмотрим, как это реализовать с помощью WP-Cron — штатного планировщика задач WordPress.

Настройка WP-Cron для проверки лицензий

WP-Cron — это система имитации планировщика задач, которая запускает запланированные события при посещении сайта. Для нашей задачи мы создадим событие, которое будет вызываться, например, раз в сутки и проверять статус лицензий.

Регистрация события в WP-Cron

Добавим в файл плагина или в functions.php темы следующий код для регистрации события:

function wplicense_schedule_license_check() {
    if ( ! wp_next_scheduled( 'wplicense_daily_license_check' ) ) {
        wp_schedule_event( time(), 'daily', 'wplicense_daily_license_check' );
    }
}
add_action( 'wp', 'wplicense_schedule_license_check' );

Этот код проверит, запланировано ли событие wplicense_daily_license_check, и если нет, создаст его с интервалом 'daily' (один раз в сутки).

Обработка события проверки лицензий

Далее нужно добавить функцию, которая будет выполнять проверку лицензий при срабатывании события:

function wplicense_handle_license_check() {
    $licenses = get_option( 'wplicense_licenses', [] );
    foreach ( $licenses as $license_key => $license_data ) {
        $response = wp_remote_post( 'https://your-license-server.com/api/check', [
            'body' => [
                'license_key' => $license_key,
                'domain' => home_url(),
            ],
            'timeout' => 15,
        ] );

        if ( is_wp_error( $response ) ) {
            // Логируем ошибку
            error_log( 'Ошибка проверки лицензии ' . $license_key . ': ' . $response->get_error_message() );
            continue;
        }

        $body = json_decode( wp_remote_retrieve_body( $response ), true );
        if ( empty( $body['valid'] ) || ! $body['valid'] ) {
            // Лицензия недействительна, обновим статус
            $licenses[ $license_key ]['status'] = 'invalid';
            // Можно дополнительно отключить функционал или уведомить пользователя
        } else {
            $licenses[ $license_key ]['status'] = 'valid';
        }
    }
    update_option( 'wplicense_licenses', $licenses );
}
add_action( 'wplicense_daily_license_check', 'wplicense_handle_license_check' );

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

Расширение функционала: уведомления и деактивация плагина

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

function wplicense_admin_notices() {
    $licenses = get_option( 'wplicense_licenses', [] );
    foreach ( $licenses as $license_key => $license_data ) {
        if ( isset( $license_data['status'] ) && $license_data['status'] === 'invalid' ) {
            echo '<div class="notice notice-error is-dismissible">';
            echo '<p>Лицензия "' . esc_html( $license_key ) . '" недействительна. Пожалуйста, обновите или активируйте лицензию.</p>';
            echo '</div>';
        }
    }
}
add_action( 'admin_notices', 'wplicense_admin_notices' );

Для ограничения функционала плагина при недействительной лицензии в коде плагина проверяйте статус лицензии из опций и отключайте соответствующие возможности.

Как тестировать и отлаживать автоматическую проверку

Для отладки можно временно изменить интервал запуска задачи на часовой или даже минутный. Это позволит быстро проверить логику. Например, для этого добавьте кастомный интервал:

function wplicense_custom_cron_intervals( $schedules ) {
    $schedules['every_five_minutes'] = [
        'interval' => 300,
        'display' => 'Каждые 5 минут'
    ];
    return $schedules;
}
add_filter( 'cron_schedules', 'wplicense_custom_cron_intervals' );

И замените вызов wp_schedule_event на использование 'every_five_minutes'. Не забудьте вернуть интервал к 'daily' после тестирования.

Также полезно использовать плагины для управления WP-Cron, например, WP Crontrol, которые позволяют вручную запускать задачи и просматривать запланированные события.

Альтернативный вариант: использование внешнего cron-сервиса

WP-Cron запускается при посещении сайта, что не всегда надежно для сайтов с низким трафиком. Если нужна более точная регулярность, стоит настроить системный cron на сервере и вызывать wp-cron.php напрямую:

* * * * * wget -q -O - https://yoursite.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Так вы гарантируете выполнение задач независимо от посещаемости.

Выводы

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

Если вы используете плагины из WPShop, например, Clearfy Pro, можно дополнительно оптимизировать работу WP-Cron и повысить безопасность.

Как сделать очистку базы данных от устаревших лицензий WordPress плагинов
02.04.2026
Как создать автоматическую проверку лицензии WordPress плагинов с помощью REST API
16.01.2026
Решение проблем с автообновлениями WooCommerce плагинов при активации лицензий
07.05.2026
Решение проблем с разграничением доступа к WooCommerce по лицензии
07.06.2026
Автоматический отчет об использовании лицензий WordPress плагинов с распределением по пользователям
21.02.2026