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

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

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

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

Учитывая роли, можно:

  • Гибко управлять лицензиями в больших командах.
  • Снизить риск превышения допустимого числа активаций.
  • Автоматизировать контроль и отчётность по лицензиям.

Такой подход повышает удобство и безопасность использования плагинов.

Как реализовать ограничение активаций по ролям — общая схема

Для реализации нам потребуется:

  1. Определить роли, для которых будут разные лимиты активаций.
  2. При попытке активации лицензии проверять роль пользователя и текущее число активных активаций для этой роли.
  3. Если лимит превышен — блокировать активацию с сообщением.
  4. Обеспечить хранение статистики активаций по ролям на лицензионном сервере или в базе данных.

В реальном проекте это можно реализовать через расширение лицензионного API, добавление новых параметров и проверок.

Пример структуры данных для хранения лимитов

В базе данных или в конфигурации лицензионного сервера можно хранить массив с ограничениями:

$wplicense_role_limits = array(<br>    'administrator' => 5,<br>    'editor' => 3,<br>    'author' => 2,<br>    'subscriber' => 1,<br>);

Это значит, что администратор может активировать лицензию на 5 сайтов, редактор — на 3 и так далее.

Код для проверки и блокировки активации по ролям

Ниже пример функции с префиксом wplicense_, которая проверяет возможность активации лицензии с учётом роли текущего пользователя. Предполагаем, что у вас есть функция получения текущих активаций по роли wplicense_get_active_activations_by_role().

function wplicense_can_activate_license_by_role( $user_id, $license_key ) {<br>    // Массив ограничений по ролям<br>    $role_limits = array(<br>        'administrator' => 5,<br>        'editor' => 3,<br>        'author' => 2,<br>        'subscriber' => 1,<br>    );<br><br>    $user = get_userdata( $user_id );<br>    if ( ! $user ) {<br>        return new WP_Error( 'invalid_user', 'Пользователь не найден' );<br>    }<br><br>    // Определяем роль пользователя, берем первую из массива ролей<br>    $roles = $user->roles;<br>    if ( empty( $roles ) ) {<br>        return new WP_Error( 'no_role', 'У пользователя нет роли' );<br>    }<br>    $role = $roles[0];<br><br>    // Проверяем наличие лимита для роли<br>    if ( ! isset( $role_limits[ $role ] ) ) {<br>        return new WP_Error( 'role_not_allowed', 'Роль пользователя не имеет доступа к активации лицензии' );<br>    }<br><br>    $max_activations = $role_limits[ $role ];<br>    $current_activations = wplicense_get_active_activations_by_role( $license_key, $role );<br><br>    if ( $current_activations >= $max_activations ) {<br>        return new WP_Error( 'limit_exceeded', 'Достигнуто максимальное количество активаций для роли ' . $role );<br>    }<br><br>    return true;<br>}

Эта функция возвращает true, если активация возможна, или WP_Error с описанием ошибки в противном случае.

Пример функции подсчёта активных активаций по роли

В реальной системе нужно реализовать хранение данных активаций. Ниже упрощённый пример, где данные берутся из базы данных wp_activations с полем user_role:

function wplicense_get_active_activations_by_role( $license_key, $role ) {<br>    global $wpdb;<br>    $table = $wpdb->prefix . 'activations';<br>    $count = $wpdb->get_var( $wpdb->prepare(<br>        "SELECT COUNT(*) FROM $table WHERE license_key = %s AND user_role = %s",<br>        $license_key,<br>        $role<br>    ));<br>    return (int) $count;<br>}

В системе лицензирования необходимо при каждой активации сохранять роль пользователя.

Как интегрировать ограничение в процесс активации лицензии

Чтобы использовать проверку с ролями, добавьте вызов wplicense_can_activate_license_by_role() в точку входа активации лицензии на вашем лицензионном сервере или в коде плагина, который отвечает за валидацию ключа.

Пример упрощённой логики:

function wplicense_handle_license_activation( $user_id, $license_key ) {<br>    $check = wplicense_can_activate_license_by_role( $user_id, $license_key );<br>    if ( is_wp_error( $check ) ) {<br>        return $check; // Возвращаем ошибку активации<br>    }<br>    // Продолжаем активацию<br>    // Сохраняем активацию с учётом роли пользователя<br>    wplicense_save_activation( $user_id, $license_key );<br>    return true;<br>}

Такой подход позволяет гибко контролировать активации и учитывать роли пользователей.

Практические советы и рекомендации

Хранение данных активаций

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

  • ID
  • license_key
  • user_id
  • user_role
  • activation_date
  • site_url (если нужно)

Это позволит быстро и эффективно фильтровать активации по ролям и лицензиям.

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

Если роль пользователя изменится, подумайте, как это повлияет на лимиты. Можно при смене роли автоматически пересчитывать количество активаций или запрещать новые, если лимит превышен.

Интеграция с WPShop

Если вы используете плагин WP Licensing от WPShop, то настройка таких ограничений возможна через расширение API и фильтры. В документации WPShop есть примеры, как добавить кастомные проверки лицензий.

Заключение

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

Как удалить записи по типам со стороны базы данных WordPress
18.02.2026
Решение проблем с лицензиями WooCommerce при использовании комплексных подписок
18.05.2026
Решение проблем с автообновлениями WooCommerce плагинов при активации лицензий
11.05.2026
Как создать двухфакторную авторизацию в WordPress для защиты плагинов
21.01.2026
Решение проблем с активацией лицензий WordPress плагинов при использовании разных средств кеширования
01.07.2026