Хуки, фильтры и REST API — тема этой страницы документации. Фильтры WordPress для промптов, параметров и пользовательских действий. Полный справочник REST API. Ниже — как настроить возможности и использовать их в рабочем процессе WordPress.
SmartyPress AI Engine предоставляет разработчикам фильтры и действия WordPress, REST API и один JavaScript-фильтр для кастомизации и расширения плагина.
Ключевые фильтры
smartypress_ai_prompt_{action}
Настройте промпт для любого действия волшебной палочки. Фильтр получает собранный промпт и аргументы.
add_filter( 'smartypress_ai_prompt_generateTitle', function( $prompt, $arguments ) { return 'Create a clickable, SEO title (max 60 chars) for: ' . ($arguments['context'] ?? '');
}, 10, 2 );
smartypress_ai_wand_params
Измените параметры генерации ИИ (temperature, max_tokens, model) для действий волшебной палочки.
add_filter( 'smartypress_ai_wand_params', function( $params, $action ) { if ( $action === 'enhanceText' ) { $params['temperature'] = 0.5; $params['max_tokens'] = 3000; } return $params;
}, 10, 2 );
smartypress_ai_wand_features
Добавьте собственные действия волшебной палочки или измените существующие.
add_filter( 'smartypress_ai_wand_features', function( $features ) { $features['generateFAQ'] = array( 'label' => 'Generate FAQ', 'sublabel' => 'Q&A Section', 'arguments' => array( 'postId', 'text', 'prompt' ), 'where' => 'blockContext', 'mode' => 'replace', 'default_prompt' => 'Generate 5 FAQ items based on: {TEXT}', 'placeholder' => 'Enter topic...', ); return $features;
} );
Фильтры контент-плана
Генерация по плану выполняется в два шага ИИ — построение редактируемой структуры плана, затем наполнение контентом — плюс опциональная генерация по разделам. У каждого шага свой фильтр.
smartypress_ai_content_plan_schema_request_params— изменить параметры запроса к ИИ для построения редактируемой структуры плана (фаза 1)smartypress_ai_content_plan_prompt— изменить промпт наполнения плана контентом (фаза 2)smartypress_ai_content_plan_request_params— добавить параметры к API-запросу наполнения плана на фазе 2smartypress_ai_content_plan_seo_analysis_enabled— управлять тем, подключается ли исследование конкурентов из модуля SEO Analysis к плану
После наполнения плана Content Generator также вызывает действие smartypress_ai_content_plan_research_generated, когда к плану были прикреплены данные исследования конкурентов (заголовки или ключевые слова). Модуль SEO Analysis слушает это действие, чтобы логировать использование исследования; его можно использовать для синхронизации данных исследования с внешней системой.
add_filter( 'smartypress_ai_content_plan_seo_analysis_enabled', function( $enabled, $provider_name, $model, $plan_context ) { // Only attach competitor research when OpenRouter is selected. return 'openrouter' === $provider_name;
}, 10, 4 ); add_action( 'smartypress_ai_content_plan_research_generated', function( $plan, $plan_context ) { error_log( 'Plan research attached for topic: ' . ( $plan_context['topic'] ?? '' ) );
}, 10, 2 );
Хуки расширения генерации контента
Массовая генерация для типов записей со специальными полями (например, товары WooCommerce) построена на небольшом интерфейсе расширения SmartyPress_AI_Post_Type_Extension_Interface. Зарегистрируйте расширение через smartypress_ai_content_post_type_extensions — реестр вызывает его на каждом шаге генерации для подходящих типов записей.
add_filter( 'smartypress_ai_content_post_type_extensions', function( array $extensions ) { $extensions[] = new My_Custom_Post_Type_Extension(); return $extensions;
} );
После регистрации расширения вокруг него для каждого сгенерированного элемента срабатывают эти обычные фильтры и одно действие:
smartypress_ai_content_generation_rules— изменить объединённые правила генерации (подсказки промпта) для типа записиsmartypress_ai_content_seo_rules— изменить объединённые SEO-правила для типа записиsmartypress_ai_content_item_context— изменить дополнительный текст контекста, который добавляется в промпт генерации для элемента очередиsmartypress_ai_content_prepared_post_data— изменить поля записи прямо перед вызовомwp_insert_post()smartypress_ai_content_after_post_persisted— действие, срабатывает после сохранения сгенерированной записи и метаданных расширения
Фильтры SEO-метаданных
Эти фильтры применяются, когда Content Generator записывает SEO-метаданные (заголовок, описание, ярлык, ключевое слово) для новой сгенерированной записи — одиночной, массовой или по плану — независимо от активного SEO-плагина.
smartypress_ai_seo_metadata_before_write
Измените SEO-метаданные (заголовок, описание, ярлык, ключевое слово) до сохранения в запись.
add_filter( 'smartypress_ai_seo_metadata_before_write', function( $metadata, $post_id ) { // Ensure brand name is always in the SEO title if ( strpos( $metadata['title'], 'MyBrand' ) === false ) { $metadata['title'] .= ' | MyBrand'; } return $metadata;
}, 10, 2 );
smartypress_ai_seo_metadata_adapters— добавить, удалить или заменить адаптеры SEO-плагинов, которые получают сгенерированные метаданные (встроенные: ярлык WordPress, Rank Math, Yoast SEO, AIOSEO)smartypress_ai_seo_metadata_adapter_enabled— включить или отключить конкретный адаптер для данной записиsmartypress_ai_bulk_seo_optimization_prompt— изменить промпт ИИ для генерации SEO-метаданных при массовой/legacy-генерацииsmartypress_ai_bulk_seo_optimization_enabled— отключить шаг SEO-метаданных на ИИ при массовой/legacy-генерацииsmartypress_ai_seo_content_deterministic_fallback_enabled— отключить не-ИИ fallback расстановки ключевых слов, когда метаданные на ИИ ненадёжныsmartypress_ai_content_output_format— принудительно задать формат сгенерированного контента:gutenberg,htmlилиlegacy_markdown
Фильтры SEO Optimization
Эти фильтры относятся только к модулю SEO Optimization, который исправляет SEO-проблемы, обнаруженные Rank Math, Yoast SEO или AIOSEO, у существующей записи через эндпоинты /seo-optimization/* ниже.
smartypress_ai_seo_content_strategies
Добавьте, удалите или измените список стратегий оптимизации контента, используемых SEO Optimization.
add_filter( 'smartypress_ai_seo_content_strategies', function( $strategies ) { // Remove the TOC strategy unset( $strategies['table_of_contents'] ); return $strategies;
} );
Фильтры провайдеров
smartypress_ai_openrouter_request_params
Измените параметры запроса, отправляемые в API OpenRouter.
add_filter( 'smartypress_ai_openrouter_request_params', function( $params ) { $params['top_p'] = 0.9; return $params;
} );
smartypress_ai_openrouter_web_search_params— изменить параметры веб-поиска для моделей Sonar/online в OpenRoutersmartypress_ai_model_capabilities— переопределить флаги возможностей (vision, веб-поиск, JSON mode и т. д.) для любой пары провайдер/модельsmartypress_ai_openrouter_model_capabilities— переопределить флаги возможностей именно для моделей OpenRoutersmartypress_ai_openrouter_text_fallback_models— изменить список запасных текстовых моделей OpenRouter, когда настроенная модель недоступна
Фильтры массовой генерации
smartypress_ai_bulk_max_topics
Измените максимальное число тем для массовой генерации (по умолчанию: 50).
add_filter( 'smartypress_ai_bulk_max_topics', function() { return 100;
} );
smartypress_ai_bulk_estimated_input_tokens— переопределить оценку входных токенов на элемент для расчёта стоимости массовой генерации (по умолчанию: 3500)smartypress_ai_bulk_estimated_output_tokens— переопределить оценку выходных токенов на элемент для расчёта стоимости массовой генерации (по умолчанию: 2500)
Хуки модулей и расширения админки
Эти хуки управляют загрузкой модулей и позволяют другим плагинам расширять экраны админки SmartyPress AI.
smartypress_ai_register_modules— отфильтровать список доступных модулей до их загрузкиsmartypress_ai_pre_load_module— действие, срабатывает непосредственно перед загрузкой файлов модуляsmartypress_ai_module_loaded— действие, срабатывает после завершения загрузки модуляsmartypress_ai_module_toggled— действие, срабатывает после включения или отключения модуля на экране «Компоненты»smartypress_ai_module_{module_id}_metadata— переопределить название, описание или иконку модуля на экране «Компоненты»smartypress_ai_module_{module_id}_settings— действие, срабатывает, пока модуль регистрирует свои настройки; используется Content Generator, Image Generator, SEO Analysis и SEO Optimizationsmartypress_ai_admin_routes— добавить или переопределить React-маршруты админки (path, component, title, icon)smartypress_ai_admin_notices— отфильтровать зарегистрированные определения уведомлений в админкеsmartypress_ai_register_admin_notices— действие, зарегистрировать дополнительные уведомления в админке
add_filter( 'smartypress_ai_register_modules', function( array $modules ) { // Prevent a module from loading at all, regardless of the Components screen. unset( $modules['seo_analysis'] ); return $modules;
} );
Фронтенд-фильтры (JavaScript)
Мастер генерации по плану предоставляет один фильтр @wordpress/hooks, чтобы другие плагины могли внедрить UI над полем темы — так модуль SEO Analysis добавляет помощник анализа конкурентов.
smartypress.contentGenerator.topicInput.beforeTopicField
Рендерит дополнительную разметку над полем темы в мастере контент-плана. Получает текущий отрисованный узел и объект контекста (settings, pluginSettings, providerModels, topic, setTopic, research, setResearch).
import { addFilter } from '@wordpress/hooks';
import { createElement, Fragment } from '@wordpress/element'; addFilter( 'smartypress.contentGenerator.topicInput.beforeTopicField', 'my-plugin/topic-field-note', ( rendered, context ) => createElement( Fragment, {}, rendered, createElement( 'p', {}, 'Current topic: ' + context.topic ) )
);
REST API
Все эндпоинты используют пространство имён smartypress/v1/ и требуют аутентификации через WordPress nonce (или другой аутентифицированный транспорт REST). Всего несколько десятков эндпоинтов; ниже они сгруппированы по назначению.
Настройки (требуется manage_options)
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /settings |
Получить все настройки плагина (API-ключи замаскированы) |
| POST | /settings |
Обновить настройки плагина (переданные поля объединяются с существующими) |
| POST | /settings/test-provider |
Проверить соединение с провайдером (обязателен provider) |
| GET | /provider-models |
Доступные текстовые модели по провайдерам (Yandex GPT и GigaChat — только при локали сайта ru_RU) |
| GET | /openrouter-image-models |
Полный каталог моделей изображений OpenRouter, включая скрытые фильтром включённых моделей |
| GET | /logs |
Прочитать отладочный лог плагина |
| DELETE | /logs |
Очистить отладочный лог плагина |
| GET | /logs/count |
Получить текущее число записей в логе |
| GET | /post-types |
Список публичных, видимых в UI типов записей, доступных для генерации ИИ |
Модули (требуется manage_options)
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /modules |
Список всех модулей со статусом enabled/loaded |
| POST | /modules/{module_id}/toggle |
Включить или отключить модуль (обязательны module_id, enabled) |
Расход токенов (требуется manage_options)
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /token-usage/stats |
Статистика расхода токенов по дням, моделям и провайдерам (days: 7, 14 или 30; по умолчанию 30) |
Вспомогательные методы консоли (требуется manage_options)
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /dashboard/check-thumbnails-plugin |
Проверить статус установки/активации сопутствующего плагина AI Thumbnails Maker |
| POST | /dashboard/install-thumbnails-plugin |
Установить плагин AI Thumbnails Maker с WordPress.org |
| POST | /dashboard/activate-thumbnails-plugin |
Активировать плагин AI Thumbnails Maker |
Генерация контента (требуется edit_posts)
| Метод | Эндпоинт | Описание |
|---|---|---|
| POST | /generate-title |
Сгенерировать заголовок из контекста (обязателен context) |
| POST | /generate-content |
Сгенерировать контент статьи для заголовка (обязателен title) |
| POST | /generate-excerpt |
Сгенерировать отрывок из контента (обязателен content) |
| POST | /generate-categories |
Предложить элементы таксономии для пары заголовок/контент (обязательны title, content) |
| POST | /wand |
Выполнить действие волшебной палочки (обязательны action, data) |
| POST | /create-post |
Создать запись WordPress из сгенерированных полей |
| POST | /generate-post-plan-schema |
Сгенерировать редактируемую структуру плана — фаза 1 (обязателен topic) |
| POST | /generate-post-plan-fill |
Наполнить структуру плана реальным контентом — фаза 2 (обязательны topic, schema) |
| POST | /improve-plan-prompt-template |
Переписать инструкцию пользователя к плану в более ясный промпт (обязателен prompt) |
| POST | /apply-post-plan-instruction |
Применить свободную инструкцию редактирования к утверждённому плану (обязательны plan, instruction) |
| POST | /generate-draft-from-plan |
Сгенерировать полный черновик статьи из утверждённого плана (обязателен plan) |
| POST | /generate-draft-lead |
Сгенерировать только лид/введение статьи из плана (обязателен plan) |
| POST | /generate-draft-section |
Сгенерировать один раздел статьи из плана, опционально с URL-референсом (обязательны plan, section) |
| POST | /create-post-from-draft-parts |
Собрать сгенерированные лид/разделы в черновик записи (обязателен blocks) |
Совет: единого эндпоинта /generate-post-plan нет. Генерация плана разделена на /generate-post-plan-schema (строит редактируемую структуру) и /generate-post-plan-fill (наполняет её контентом), чтобы редактор мог проверить и скорректировать структуру до того, как ИИ запишет значения плана.
Массовая генерация (требуется publish_posts, кроме /bulk-prompts, для которого нужен edit_posts)
| Метод | Эндпоинт | Описание |
|---|---|---|
| POST | /bulk-generate |
Сгенерировать несколько записей из списка тем (устаревший синхронный поток) |
| POST | /bulk-generate-single |
Сгенерировать одну запись внутри устаревшего массового пакета (обязателен topic) |
| GET | /bulk-prompts |
Получить шаблоны промптов массовой генерации по умолчанию |
| POST | /bulk-jobs |
Создать задание массовой генерации в очереди из списка тем или массива элементов |
| POST | /bulk-estimate |
Оценить расход токенов и стоимость задания массовой генерации до запуска |
| GET | /bulk-jobs/{job_id} |
Получить статус и прогресс задания массовой генерации |
| POST | /bulk-jobs/{job_id}/process |
Обработать следующий элемент очереди в задании |
| POST | /bulk-jobs/{job_id}/action |
Приостановить, возобновить, отменить или повторить задание (обязателен action) |
Генерация изображений (требуется edit_posts)
| Метод | Эндпоинт | Описание |
|---|---|---|
| POST | /generate-image |
Сгенерировать изображение по промпту (обязателен prompt) |
| GET | /generated-images |
Список изображений, уже сохранённых ИИ в медиатеку |
| GET | /image-models |
Доступные модели генерации изображений по провайдерам |
| GET | /image-edit-models |
Доступные модели изображений с поддержкой редактирования/регенерации |
| POST | /regenerate-image |
Отредактировать существующее изображение ИИ корректирующим промптом (обязательны attachment_id, prompt) |
Image ALT Generator (требуется upload_files, кроме обновления настроек — для него нужен manage_options)
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /image-alt/attachments |
Список изображений со статусом ALT, с пагинацией, фильтром и поиском |
| GET | /image-alt/stats |
Статистика медиатеки (всего, с ALT / без ALT, сгенерировано, с ошибками) |
| GET | /image-alt/index |
Текущее состояние индексации и доступные типы записей |
| POST | /image-alt/index/start |
Начать пересборку индекса ALT медиатеки |
| POST | /image-alt/index/next |
Обработать следующую партию индексации |
| POST | /image-alt/index/cancel |
Отменить текущее задание индексации |
| POST | /image-alt/generate |
Сгенерировать alt-текст для одного изображения (обязателен attachment_id) |
| GET | /image-alt/job |
Получить статус текущего задания массовой генерации |
| POST | /image-alt/bulk/start |
Запустить задание массовой генерации ALT |
| POST | /image-alt/bulk/next |
Обработать следующую партию в текущем массовом задании |
| POST | /image-alt/bulk/cancel |
Отменить текущее массовое задание |
| GET | /image-alt/settings |
Получить настройки модуля (требуется upload_files) |
| POST | /image-alt/settings |
Сохранить настройки модуля (требуется manage_options) |
SEO Optimization (требуется edit_post для целевой записи, кроме keyword-slug — для него нужен edit_posts)
| Метод | Эндпоинт | Описание |
|---|---|---|
| POST | /seo-optimization/context |
Закэшировать нормализованный контекст записи для SEO-анализа (TTL 30 мин, обязателен post_id) |
| POST | /seo-optimization/run |
Запустить полный пайплайн SEO-исправлений (анализ → метаданные → контент, обязателен post_id) |
| POST | /seo-optimization/fix |
Применить выбранные SEO-исправления к записи (обязателен post_id) |
| GET | /seo-optimization/keyword-slug |
Преобразовать ключевое слово в форму ярлыка (обязателен keyword) |
SEO Analysis (требуется edit_posts)
| Метод | Эндпоинт | Описание |
|---|---|---|
| POST | /seo-analysis/competitors |
Исследовать конкурентов по фокусному ключевому слову через OpenRouter Sonar (любая локаль) или Yandex Search (только ru_RU) |
| POST | /seo-analysis/keywords |
Предложить связанные ключевые слова с объёмом поиска через Yandex Wordstat (только ru_RU) |
Чек-лист работы с хуками, фильтрами и REST API
Рабочий процесс с хуками, фильтрами и REST API лучше воспринимать как повторяемую процедуру, а не разовую настройку. Сначала убедитесь, что связанный с этой страницей модуль SmartyPress AI Engine включён, затем проверьте провайдер, модель, язык и типы записей по умолчанию — и только после этого запускайте функцию на боевом контенте. Так результат остаётся предсказуемым и проще сравнивать ответы OpenAI, DeepSeek, Anthropic Claude, OpenRouter, Yandex GPT и GigaChat.
Используйте этот чек-лист, когда документируете, тестируете или обучаете другого редактора работе с хуками, фильтрами и REST API. Он помогает держать настройку в согласии с правами WordPress, полями Rank Math SEO и редакционным процессом сайта. Если результат отличается от ожидаемого, повторите тот же чек-лист с более коротким промптом и меньшей температурой, прежде чем менять глобальные настройки.
- Убедитесь, что нужный модуль SmartyPress AI включён на экране «Компоненты».
- Откройте «Настройки» и проверьте, что у выбранного провайдера есть действительный API-ключ и проверенное соединение.
- Выберите модель под задачу: быстрые — для черновиков, премиум — для финальных маркетинговых текстов, с веб-поиском — для исследований.
- Перед генерацией проверьте язык вывода, температуру, max tokens и переменные промптов.
- Сначала сохраните результат как черновик, затем проверьте заголовки, ссылки, факты и SEO-поля перед публикацией.
Рекомендуемые настройки
Для большинства задач с хуками, фильтрами и REST API начните с сбалансированной модели вроде GPT-4o Mini, GPT-4o, DeepSeek V4 Flash, Claude Sonnet или тщательно выбранной модели OpenRouter. Держите температуру около 0.5–0.8 для документации и обучающих материалов: здесь важнее ясность, чем эксперименты. Повышайте температуру только когда нужны более креативные заголовки, введения или альтернативные формулировки.
Задайте понятный язык по умолчанию и держите переменные промптов согласованными между статьями. Для страниц документации лучше всего подходит нейтральный или профессиональный тон письма. Если результат слишком короткий, увеличьте число разделов или абзацев в разделе, а не просите модель «написать ещё» постфактум. Структурированные настройки дают более стабильный результат и упрощают воспроизведение сценария Хуки, фильтры и REST API позже.