wp_register_ability()
Регистрирует новую возможность (ability) в Abilities API.
Возможность описывает отдельную операцию: входные данные, результат, функцию выполнения и правила доступа. Зарегистрированные возможности могут находить и запускать другие плагины, REST API, MCP и AI-инструменты.
Для регистрации нужно:
- Подключиться к хуку wp_abilities_api_init.
- Передать имя возможности и её настройки в wp_register_ability().
- Указать функции проверки доступа и выполнения.
Имя возможности должно:
- Содержать пространство имён, например
my-plugin/generate-report. - Состоять из строчных латинских букв, цифр, дефисов и
/. - Описывать действие, например
process-payment, а не простоpayment.
Категория возможности должна быть зарегистрирована на хуке wp_abilities_api_categories_init раньше самой возможности.
Входные и выходные данные описываются с помощью JSON Schema. WordPress проверяет по этим схемам данные, переданные в возможность, и полученный результат.
Схема обязательна, если возможность принимает или возвращает значение. Поддерживается подмножество JSON Schema Draft 4.
Хуков нет.
Возвращает
WP_Ability|null.
- WP_Ability - объект зарегистрированной возможности.
null- зарегистрировать возможность не удалось. Например, функция вызвана вне нужного хука, имя или настройки некорректны либо возможность уже зарегистрирована.
Использование
wp_register_ability( $name, $args ): ?WP_Ability;
- $name(string) (обязательный)
- Уникальное имя возможности с пространством имён, например
my-plugin/analyze-text. - $args(array) (обязательный)
Настройки возможности.
-
label(string) (обязательный)
Понятное человеку название. Рекомендуется переводить через __(). -
description(string) (обязательный)
Описание назначения возможности и случаев её использования. -
category(string) (обязательный)
Ярлык категории. Категорию нужно заранее зарегистрировать через wp_register_ability_category(). -
execute_callback(callable) (обязательный)
Функция, выполняющая операцию. Получает входные данные и возвращает результат илиWP_Error. -
permission_callback(callable) (обязательный)
Функция проверки доступа. Получает те же данные, что иexecute_callback.Должна вернуть:
true- выполнение разрешено.false- выполнение запрещено.WP_Error- выполнение запрещено с подробным описанием ошибки.
Можно проверять права пользователя, API-ключ или состояние системы.
-
input_schema(array)
JSON Schema входных данных. Используется для автоматической проверки и документирования.Если возможность принимает данные, схема обязательна.
-
output_schema(array)
JSON Schema результата выполнения.Если возможность возвращает данные, схема обязательна.
-
meta(array)
Дополнительные настройки возможности:annotations(array) - подсказки о поведении возможности:readonly(bool|null) - возможность не изменяет данные.destructive(bool|null) - возможность может выполнять разрушительные изменения.falseуказывает, что изменения только добавляют данные.idempotent(bool|null) - повторный вызов с теми же данными не создаёт дополнительных изменений.
public(bool) - делает возможность доступной внешним клиентам, например MCP и AI-агентам. По умолчаниюfalse.show_in_rest(bool) - делает возможность доступной через REST API. По умолчанию наследует значениеpublic.
Аннотации только описывают поведение для внешних инструментов. Они не ограничивают выполнение возможности.
- ability_class(string)
Полное имя класса создаваемого объекта. Класс должен наследовать WP_Ability{}.
По умолчанию:WP_Ability
-
Примеры
#1 Регистрация возможности анализа текста
Возможность принимает строку, проверяет её по JSON Schema и получает результат анализа.
add_action( 'wp_abilities_api_init', 'my_plugin_register_abilities' );
function my_plugin_register_abilities(): void {
wp_register_ability(
'my-plugin/analyze-text',
[
'label' => __( 'Analyze Text', 'my-plugin' ),
'description' => __( 'Performs sentiment analysis on provided text.', 'my-plugin' ),
'category' => 'text-processing',
'input_schema' => [
'type' => 'string',
'description' => __( 'The text to be analyzed.', 'my-plugin' ),
'minLength' => 10,
'required' => true,
],
'output_schema' => [
'type' => 'string',
'enum' => [ 'positive', 'negative', 'neutral' ],
'description' => __( 'The sentiment result: positive, negative, or neutral.', 'my-plugin' ),
'required' => true,
],
'execute_callback' => 'my_plugin_analyze_text',
'permission_callback' => 'my_plugin_can_analyze_text',
'meta' => [
'annotations' => [
'readonly' => true,
],
'show_in_rest' => true,
],
]
);
}
function my_plugin_analyze_text( string $input ): string|WP_Error {
$score = My_Plugin::perform_sentiment_analysis( $input );
if ( is_wp_error( $score ) ) {
return $score;
}
return My_Plugin::interpret_sentiment_score( $score );
}
function my_plugin_can_analyze_text( string $input ): bool|WP_Error {
return current_user_can( 'edit_posts' );
}
#2 Регистрация категории
add_action( 'wp_abilities_api_categories_init', 'my_plugin_register_categories' );
function my_plugin_register_categories(): void {
wp_register_ability_category(
'text-processing',
[
'label' => __( 'Text Processing', 'my-plugin' ),
'description' => __( 'Abilities for analyzing and transforming text.', 'my-plugin' ),
]
);
}
#3 Публикация возможности в REST API
Укажите show_in_rest = true, чтобы возможность можно было запускать через HTTP-запросы к REST API.
'meta' => [ 'show_in_rest' => true, ],
Заметки
- Смотрите: WP_Abilities_Registry::register()
- Смотрите: wp_register_ability_category()
- Смотрите: wp_unregister_ability()
Список изменений
| С версии 6.9.0 | Введена. |