' . "\n"; aicc_mostrar_cabecera_pagina_admin(); echo '

'; esc_html_e( 'Create article', 'ai-content-creator' ); echo "

\n"; // Determina si falta acceso a la generación (OpenAI por ahora). $deshabilitado = ''; if ( ! aicc_conf_apikoai() ) { $mensaje = __( 'You have not configured your API Key yet.', 'ai-content-creator' ); $mensaje .= '
'; /* translators: %1$s: HTML link start, %2$s: HTML link end. */ $mensaje .= sprintf( __( 'Go to %1$shelp section%2$s and follow the procedure to create one.', 'ai-content-creator' ), '', '' ); aicc_mostrar_notificacion( $mensaje, 'error' ); $deshabilitado = ' disabled'; } $generar = false; $regenerar = false; $titulo = ''; $contexto = ''; $directrices_adicionales = ''; // Generar es el proceso completo con creación de la AI. // Regenerar es solamente mostrar el formulario para poder luego pulsar y generar. if ( isset( $_POST['generar'] ) ) { $generar = true; } elseif ( isset( $_GET['accion'] ) ) { if ( 'regenerar' === $_GET['accion'] ) { $regenerar = true; } } // Commas, quotes and symbols are welcome, will use wp_unslash to allow them. // Database usage. // Tanto al generar como al regenerar, hay datos previos considerable para cargar en el form. if ( $generar ) { if ( isset( $_POST['titulo'] ) ) { // Aquí perdemos la posibilidad de títulos como "¿Debo utilizar o ?". // Revertir las magic_quotes, que siempre actúan en WP. $titulo = sanitize_text_field( wp_unslash( $_POST['titulo'] ) ); // Sanea y valida el título para determinar que la generación es válida. $titulo = aicc_sanea_titulo( $titulo ); if ( ! aicc_valida_titulo( $titulo ) ) { $generar = false; } } if ( isset( $_POST['contexto'] ) ) { $contexto = sanitize_textarea_field( wp_unslash( $_POST['contexto'] ) ); if ( ! aicc_sanea_contexto( $contexto ) ) { $generar = false; } } if ( isset( $_POST['directrices_adicionales'] ) ) { $directrices_adicionales = sanitize_textarea_field( wp_unslash( $_POST['directrices_adicionales'] ) ); if ( ! aicc_sanea_directrices_adicionales( $directrices_adicionales ) ) { $generar = false; } } } if ( $regenerar ) { /* Cargar ID o indicar error. Cargar cada campo que exista. */ if ( isset( $_GET['id'] ) ) { $id_articulo = sanitize_text_field( wp_unslash( $_GET['id'] ) ); $id_articulo = aicc_valida_id_articulo( $id_articulo ); $aicc_generacion_anterior = new AIccGeneracion(); if ( $aicc_generacion_anterior->cargar( $id_articulo ) ) { $titulo = $aicc_generacion_anterior->titulo(); $contexto = $aicc_generacion_anterior->contexto(); $directrices_adicionales = $aicc_generacion_anterior->directrices_adicionales(); } else { aicc_mostrar_notificacion( __( 'Unable to load the specified article.', 'ai-content-creator' ), 'error' ); } } else { aicc_mostrar_notificacion( __( 'You have not specified based on which article you want to create another one.', 'ai-content-creator' ), 'error' ); } } echo wp_kses( aicc_formulario_crear_html( $titulo, $contexto, $directrices_adicionales, $deshabilitado ), aicc_permitidos_kses_formulario() ); echo aicc_imagen_espera_html(); ?>
'; $modelo = aicc_conf_modelo(); $aicc_generacion = new AIccGeneracion(); $aicc_generacion = aicc_generar_contenido( $modelo, $titulo, $contexto, $directrices_adicionales ); // Al terminar de generar, oculta la animación de nuevo. ?> mostrar_errores_html(); if ( ! $aicc_generacion->contenido() ) { aicc_mostrar_notificacion( __( 'Something went wrong while trying to generate the content.', 'ai-content-creator' ), 'warning' ); } else { esc_html_e( 'Content', 'ai-content-creator' ); echo ":\n"; $aicc_generacion->mostrar_iframe_contenido_html(); echo $aicc_generacion->bloque_operaciones_html(); } echo '
'; } ?>
' . "\n"; $html .= '' . "\n"; $html .= '
' . "\n"; $html .= '
' . "\n"; $html .= "
\n"; $html .= '' . "\n"; $html .= "
\n"; $html .= '' . "\n"; $html .= '
' . "\n"; $html .= '' . "\n"; $html .= '
' . "\n"; $html .= '' . "\n"; $html .= '
' . "\n"; $html .= '' . "\n"; $html .= '
' . "\n"; $html .= '' . "\n"; $html .= '
' . "\n"; $html .= '' . "\n"; return $html; } /** Prompt para continuar un artículo con un título dado. * * @param {string} $titulo - El título del artículo. * @return {string} La cadena de texto formateada con el título. */ function aicc_prompt_continuar( $titulo ) { $prompt = __( 'Title', 'ai-content-creator' ) . ": $titulo\r\n"; $prompt = "

$titulo

\r\n"; $inicio_respuesta = ''; $inicio_respuesta .= '

'; $prompt .= $inicio_respuesta; return $prompt; } /** Prompt para continuar un artículo con un título dado paso a paso. * * @param {string} $titulo - El título del artículo. * @return {string} La cadena de texto formateada con el título y la frase "Vamos paso a paso". */ function aicc_prompt_continuar_paso_a_paso( $titulo ) { // Zero Shot Chain of Thought. $prompt = "

$titulo

\r\n"; $inicio_respuesta = ''; /* translators: This is part of a prompt to an AI. */ $inicio_respuesta .= '

' . __( "Let's go step by step", 'ai-content-creator' ) . ".

\r\n

"; $prompt .= $inicio_respuesta; return $prompt; } /** Prompt para solicitar la creación de un artículo con título, contexto y directrices adicionales. * * @param {string} $titulo - El título del artículo. * @param {string} $contexto - El contexto del tema que se abordará (opcional). * @param {string} $directrices_adicionales - Directrices adicionales para el artículo (opcional). * @return {string} La cadena de texto formateada con el título, contexto y directrices adicionales. */ function aicc_prompt_solicitar( $titulo, $contexto = '', $directrices_adicionales = '' ) { // Caracteristicas adicionales a indicar en el prompt. $caracteristicas_adicionales = array(); $separador = "\n•"; /** Opciones deshabilitadas. $longitud = aicc_conf_longitud(); $caracteristicas_adicionales[] = "Tener una longitud de $longitud palabras."; $caracteristicas_adicionales[] = 'Redactado en idioma ' . aicc_nombre_idioma( aicc_conf_idioma() ) . '.'; $caracteristicas_adicionales[] = 'Imprescindible que sea en formato HTML.'; $caracteristicas_adicionales[] = "Asegúrate de que el contenido del artículo esté relacionado únicamente con el tema \"$titulo\"."; $caracteristicas_adicionales[] = 'Inícialo con un índice basado en los títulos y subtítulos.'; */ if ( aicc_conf_tablacontenidos() ) { /* translators: This is part of a prompt to an AI. */ $caracteristicas_adicionales[] = __( 'Place a table of contents based on the titles and subtitles after a first introduction paragraph.', 'ai-content-creator' ); } /* translators: This is part of a prompt to an AI. */ $caracteristicas_adicionales[] = __( 'Make sure to include the necessary tags to structure the content into main titles and subtitles using the

and

tags, respectively.', 'ai-content-creator' ); /* translators: This is part of a prompt to an AI. */ $caracteristicas_adicionales[] = __( 'Also use the
    and
  • tags to create lists and
      and
    1. to enumerate necessary steps. Use the

      tag to separate content into paragraphs,
      to indicate line breaks and any other convenient tags.', 'ai-content-creator' ); /* translators: This is part of a prompt to an AI. */ $caracteristicas_adicionales[] = __( 'Never use