Создайте свой первый AI-плагин для WordPress
Узнайте, как использовать новые инструменты WordPress: Abilities API, AI Client и MCP Adapter для создания AI-плагина Photo to Post.
В последних двух мажорных релизах WordPress появились важные инструменты для разработчиков, желающих использовать искусственный интеллект: Abilities API (стандартный способ регистрации функциональных блоков, доступных для REST API, редактора, других разработчиков и AI-агентов), WordPress AI Client (провайдеро-независимая PHP-библиотека для работы с любыми AI-моделями) и MCP Adapter (открывает способности как MCP-инструменты для внешних AI-агентов). В этом руководстве мы шаг за шагом создадим реальный плагин Photo to Post, который иллюстрирует, как три этих компонента работают вместе.
Плагин Photo to Post: архитектура и возможности
Photo to Post — это плагин, который по URL изображения:
- генерирует текстовое описание с помощью AI-модели с поддержкой зрения;
- на основе описания создаёт черновик поста (заголовок и содержимое);
- устанавливает исходное изображение как миниатюру записи.
Ключевая особенность — внутри плагин состоит из трёх композируемых способностей (Abilities), которые вызывают WordPress AI Client. Третий навык — пример композиции: он вызывает два других через WP_Ability::execute(). Это принципиальное отличие от традиционных подходов к созданию функциональности в WordPress.
| Способность | Действие | Возможность AI |
|---|---|---|
describe-image |
URL изображения → текстовое описание | Vision (ввод изображения) |
generate-post-from-description |
Описание → заголовок и контент | Генерация текста |
create-post-from-photo |
Оркестрирует две выше, затем создаёт пост | Без AI, но управляет другими |
Подготовка окружения и подключение AI-провайдера
Для запуска кода потребуются:
- локальное окружение WordPress 7.0+, PHP 8.1+, Composer и Node.js;
- API-ключ провайдера с моделью, поддерживающей vision (OpenAI, Anthropic, Google или любой другой через плагин).
Установите и активируйте стартовый плагин (скачать версию 1.1.1), выполните composer install и npm install. В главном файле плагина отмечены TODO — именно в этих местах мы будем писать код.
С WordPress 7.0 для хранения API-ключей появился единый экран Коннекторы (Настройки). Разработчики могут зарегистрировать свой коннектор, и пользователь сможет ввести ключ в одном месте. Для AI-провайдеров уже существуют плагины OpenAI, Anthropic, Google — установите нужный и сохраните ключ. Это избавляет от необходимости создавать отдельную страницу настроек для каждого плагина.
Регистрация способностей (Abilities) и подключение к REST API
Регистрация происходит через функции wp_register_ability_category и wp_register_ability в файле includes/abilities.php. Каждая способность — это описание с меткой, описанием, схемами ввода/вывода, проверкой прав и callback-функцией.
wp_register_ability_category(
'wp-ai-workshop-demo',
array(
'label' => __( 'WP AI Workshop Demo', 'wp-ai-workshop-demo' ),
'description' => __( 'Abilities for the WP AI Workshop Demo.', 'wp-ai-workshop-demo' ),
)
);
Затем регистрируются три способности. Например, первая — wp-ai-workshop-demo/describe-image:
wp_register_ability(
'wp-ai-workshop-demo/describe-image',
array(
'label' => __( 'Describe an image via AI', 'wp-ai-workshop-demo' ),
'description' => __( 'Given an image URL, use AI vision to produce a detailed text description of the image.', 'wp-ai-workshop-demo' ),
'category' => 'wp-ai-workshop-demo',
'input_schema' => array(
'type' => 'object',
'properties' => array(
'image_url' => array(
'type' => 'string',
'description' => 'The URL of the image to describe.',
),
),
'required' => array( 'image_url' ),
),
'output_schema' => array(
'type' => 'object',
'properties' => array(
'description' => array(
'type' => 'string',
'description' => 'A detailed description of the image.',
),
),
'required' => array( 'description' ),
),
'execute_callback' => 'wp_ai_workshop_demo_describe_image',
'permission_callback' => function () {
return current_user_can( 'edit_posts' );
},
'meta' => array(
'show_in_rest' => true,
),
)
);
Аналогично регистрируются generate-post-from-description и create-post-from-photo. После этого достаточно добавить хуки в главном файле плагина:
add_action( 'wp_abilities_api_categories_init', 'wp_ai_workshop_demo_register_ability_categories' );
add_action( 'wp_abilities_api_init', 'wp_ai_workshop_demo_register_describe_image_ability' );
add_action( 'wp_abilities_api_init', 'wp_ai_workshop_demo_register_generate_post_from_description_ability' );
add_action( 'wp_abilities_api_init', 'wp_ai_workshop_demo_register_create_post_from_photo_ability' );
Теперь, если в настройках постоянных ссылок выбрано не «Обычные», способности сразу доступны через REST API: можно авторизоваться через пароль приложения и отправить GET-запрос к wp-json/wp-abilities/v1/abilities. В ответе будут видны все три зарегистрированные способности с полными схемами — и это без единой строки кода для REST.
Реализация логики: описание изображения, генерация поста и композиция
Шаг 1: Описание изображения (файл includes/vision.php). Здесь впервые вызывается WordPress AI Client. Изображение загружается через wp_remote_get(), преобразуется в data URI (так как некоторые провайдеры, например Anthropic, требуют inline-формат, а data URI универсален).
$data_uri = wp_ai_workshop_demo_image_url_to_data_uri( $image_url );
$prompt = 'Describe this image in detail for someone who cannot see it. Focus on the main subject…';
$description = wp_ai_client_prompt()
->with_text( $prompt )
->with_file( $data_uri )
->generate_text();
wp_ai_client_prompt() возвращает построитель запроса. В случае ошибки возвращается WP_Error — это важно проверять.
Шаг 2: Генерация поста (файл includes/content.php). Второй AI-запрос превращает описание в заголовок и содержимое. Чтобы получить структурированный ответ, промпт просит вернуть JSON-объект с ключами title и content.
$text = wp_ai_client_prompt( $prompt )->generate_text();
$data = wp_ai_workshop_demo_decode_json_response( $text ); // защита от лишних markdown-обёрток
Добавлена вспомогательная функция, которая вырезает возможные markdown-блоки кода — AI-модели не всегда строго следуют инструкциям, и такой защитный парсинг гарантирует получение корректного JSON.
Шаг 3: Композиция способностей (файл includes/post.php). Это ключевой момент: способность create-post-from-photo не обращается к AI напрямую. Она вызывает две другие способности через wp_get_ability() и ->execute():
$describe_ability = wp_get_ability( 'wp-ai-workshop-demo/describe-image' );
$description_result = $describe_ability->execute( array( 'image_url' => $image_url ) );
$generate_ability = wp_get_ability( 'wp-ai-workshop-demo/generate-post-from-description' );
$copy_result = $generate_ability->execute( array(
'description' => $description_result['description'],
'prompt' => $prompt,
) );
// Затем создаётся пост и устанавливается миниатюра
Такой подход — как сборка из кубиков LEGO: маленькие способности комбинируются в более сложные. Это напоминает силу хуков и фильтров, но на уровне новых архитектурных решений.
Интеграция с админкой и MCP: один код — три интерфейса
После регистрации способности автоматически доступны через REST, но их можно использовать и в JS. Для этого в includes/admin.php подключается скрипт-модуль @wordpress/core-abilities. Затем в React-компоненте SettingsPage импортируются функции getAbility и executeAbility:
const { getAbility, executeAbility } = await import( '@wordpress/abilities' );
const ability = getAbility( 'wp-ai-workshop-demo/create-post-from-photo' );
const result = await executeAbility( 'wp-ai-workshop-demo/create-post-from-photo', {
image_url: input.image_url,
prompt: input.prompt,
} );
Таким образом, та же способность, которую мы проверяли через curl, теперь работает из панели управления.
Последний шаг — открыть доступ к способности через MCP. Для этого в регистрации create-post-from-photo в массиве meta добавляется флаг 'mcp' => array( 'public' => true ). Затем устанавливается и активируется плагин MCP Adapter, который создаёт MCP-сервер на сайте. После этого любой MCP-клиент (например, Claude Desktop) может вызвать способность, отправив команду «создай пост по этой фотографии». Три разных точки входа — REST, админка, AI-агент — и ни одной строки дублирующегося кода.
Настройка тайм-аута
Поскольку плагин делает два последовательных AI-запроса и загружает изображение, одного HTTP-запроса может не хватить. AI Client предоставляет фильтр для увеличения тайм-аута:
add_filter( 'wp_ai_client_default_request_timeout', function() {
return 120;
} );
Итоги
Используя новые возможности ядра WordPress — Abilities API, AI Client и MCP Adapter — вы можете добавлять AI-функции в свои плагины без изобретения велосипедов. Регистрируйте способности, описывайте их схемы, компонуйте маленькие в большие — и REST API, редактор блоков и внешние AI-агенты получат доступ к ним автоматически. Именно такой подход открывает путь к созданию по-настоящему интеллектуальных и расширяемых решений для WordPress.
Источник: https://developer.wordpress.org/news/2026/07/build-your-first-ai-powered-wordpress-plugin/