Yoast\WP\SEO\AI\Content_Planner\Application
Content_Outline_Command_Handler::handle
Handles the content outline command by collecting recent content and requesting an outline from the AI API.
Метод класса: Content_Outline_Command_Handler{}
Хуков нет.
Возвращает
Section_List. A list of outline sections.
Использование
$Content_Outline_Command_Handler = new Content_Outline_Command_Handler(); $Content_Outline_Command_Handler->handle( $command, $retry_on_unauthorized ): Section_List;
- $command(Content_Outline_Command) (обязательный)
- The content outline command.
- $retry_on_unauthorized(true|false)
- Whether to retry on unauthorized response.
По умолчанию:true
Код Content_Outline_Command_Handler::handle() Content Outline Command Handler::handle Yoast 27.7
public function handle(
Content_Outline_Command $command,
bool $retry_on_unauthorized = true
): Section_List {
$recent_content = $this->recent_content_collector->collect( $command->get_post_type() );
$about_page = $this->recent_content_collector->collect_about_page( $command->get_post_type() );
$token = $this->token_manager->get_or_request_access_token( $command->get_user() );
$recent_content = $recent_content->to_array();
$existing_posts = \array_map(
static function ( $post ) {
return [
'title' => $post['title'],
'description' => $post['description'],
];
},
$recent_content,
);
$content = [
'new_post_metadata' => [
'title' => $command->get_title(),
'intent' => $command->get_intent(),
'explanation' => $command->get_explanation(),
'keyphrase' => $command->get_keyphrase(),
'meta_description' => $command->get_meta_description(),
'category' => $command->get_category()->to_array(),
],
'existing_posts' => $existing_posts,
];
if ( $about_page ) {
$content['about_page'] = $about_page;
}
$request_body = [
'subject' => [
'language' => $command->get_language(),
'content' => $content,
],
];
$request_headers = [
'Authorization' => "Bearer $token",
'X-Yst-Cohort' => $command->get_editor(),
];
try {
$response = $this->request_handler->handle( new Request( '/content-planner/next-post-outline', $request_body, $request_headers ) );
} catch ( Unauthorized_Exception $exception ) {
// Delete the stored JWT tokens, as they appear to be no longer valid.
$this->token_manager->clear_tokens( (string) $command->get_user()->ID );
if ( ! $retry_on_unauthorized ) {
throw $exception;
}
// Try again once more by fetching a new set of tokens and trying the outline endpoint again.
return $this->handle( $command, false );
} catch ( Forbidden_Exception $exception ) {
// Follow the API in the consent being revoked (Use case: user sent an e-mail to revoke?).
// phpcs:disable WordPress.Security.EscapeOutput.ExceptionNotEscaped -- false positive.
$this->consent_handler->revoke_consent( $command->get_user()->ID );
throw new Forbidden_Exception( 'CONSENT_REVOKED', $exception->getCode() );
// phpcs:enable WordPress.Security.EscapeOutput.ExceptionNotEscaped
}
return $this->build_outline( $response );
}