\n";
}
// Inicializa la configuración del plugin y agrega secciones y campos de configuración.
add_action( 'admin_init', 'aicc_settings_init' );
/** Inicializa la configuración del plugin y agrega secciones y campos de configuración.
*/
function aicc_settings_init() {
register_setting(
'aicc_settings', // Option group.
'aicc_settings', // Option name.
'aicc_settings_validate' // Function to validate input.
);
add_settings_section(
'aicc_settings_section_openai', // ID of the section.
__( 'Legacy OpenAI fallback', 'ai-content-creator' ), // Title of the section.
'aicc_settings_section_openai_callback', // Function to be called to display the section.
'aicc_settings' // Slug of the page.
);
add_settings_field(
'aicc_apikoai', // ID of the field.
__( 'Legacy OpenAI API key', 'ai-content-creator' ), // Title of the field.
'aicc_settings_apikoai_callback', // Function to be called to display the section.
'aicc_settings', // Slug of the page.
'aicc_settings_section_openai' // ID of the section.
);
add_settings_field(
'aicc_modelo',
__( 'Legacy OpenAI model', 'ai-content-creator' ),
'aicc_settings_modelo_callback',
'aicc_settings',
'aicc_settings_section_openai'
);
/** Ajustes no utilizados
add_settings_section(
'aicc_settings_section_posproduccion',
_ _( 'External post-production system (optional)', 'ai-content-creator' ),
'aicc_settings_section_posproduccion_callback',
'aicc_settings'
);
add_settings_field(
'aicc_apiurlposproduccion',
_ _( 'Post-production URL', 'ai-content-creator' ),
'aicc_settings_apiurlposproduccion_callback',
'aicc_settings',
'aicc_settings_section_posproduccion'
);
add_settings_field(
'aicc_apikposproduccion',
_ _( 'Post-production API key', 'ai-content-creator' ),
'aicc_settings_apikposproduccion_callback',
'aicc_settings',
'aicc_settings_section_posproduccion'
);
*/
add_settings_section(
'aicc_settings_section_ai_client',
__( 'WordPress AI Client providers', 'ai-content-creator' ),
'aicc_settings_section_ai_client_callback',
'aicc_settings'
);
add_settings_field(
'aicc_ai_client_prioridades',
__( 'AI Client model priorities', 'ai-content-creator' ),
'aicc_settings_ai_client_prioridades_callback',
'aicc_settings',
'aicc_settings_section_ai_client'
);
add_settings_section(
'aicc_settings_section_general',
__( 'General settings', 'ai-content-creator' ),
'',
'aicc_settings'
);
add_settings_field(
'aicc_longitud',
__( 'Article length in words', 'ai-content-creator' ),
'aicc_settings_longitud_callback',
'aicc_settings',
'aicc_settings_section_general'
);
add_settings_field(
'aicc_timeout',
__( 'Time limit in seconds', 'ai-content-creator' ),
'aicc_settings_timeout_callback',
'aicc_settings',
'aicc_settings_section_general'
);
add_settings_field(
'aicc_idioma',
__( 'Language of created articles', 'ai-content-creator' ),
'aicc_settings_idioma_callback',
'aicc_settings',
'aicc_settings_section_general'
);
add_settings_field(
'aicc_tono',
__( 'Tone of created articles', 'ai-content-creator' ),
'aicc_settings_tono_callback',
'aicc_settings',
'aicc_settings_section_general'
);
add_settings_field(
'aicc_tablacontenidos',
__( 'Table of contents', 'ai-content-creator' ),
'aicc_settings_tablacontenidos_callback',
'aicc_settings',
'aicc_settings_section_general'
);
add_settings_field(
'aicc_editorescrean',
__( 'Editors', 'ai-content-creator' ),
'aicc_settings_editorescrean_callback',
'aicc_settings',
'aicc_settings_section_general'
);
}
/** Callback para la sección "OpenAI account".
*/
function aicc_settings_section_openai_callback() {
echo '
';
esc_html_e( 'Used only when WordPress AI Client providers are not available.', 'ai-content-creator' );
echo ' ';
esc_html_e( 'For WordPress 7.0 and newer, configure AI providers through WordPress AI provider plugins whenever possible.', 'ai-content-creator' );
echo '
';
}
/** Callback para la sección "WordPress AI Client providers".
*/
function aicc_settings_section_ai_client_callback() {
esc_html_e( 'Preferred inference providers and models for WordPress AI Client.', 'ai-content-creator' );
echo ' ';
esc_html_e( 'These settings are used before the legacy OpenAI fallback.', 'ai-content-creator' );
}
/** Callback para el campo "OpenAI API key".
*/
function aicc_settings_apikoai_callback() {
$valor = '';
$options = get_option( 'aicc_settings' );
if ( isset( $options['aicc_apikoai'] ) ) {
$valor = $options['aicc_apikoai'];
}
echo ' ' . "\n";
echo ' ';
echo '';
esc_html_e( 'Help', 'ai-content-creator' );
echo "\n";
}
/** Callback para la sección "External post-production system (optional)".
*/
function aicc_settings_section_posproduccion_callback() {
esc_html_e( 'Enter your access data for post-production API', 'ai-content-creator' );
}
/** Callback para el campo "Post-production URL".
*/
function aicc_settings_apiurlposproduccion_callback() {
$valor = '';
$options = get_option( 'aicc_settings' );
if ( isset( $options['aicc_apiurlposproduccion'] ) ) {
$valor = $options['aicc_apiurlposproduccion'];
}
echo '' . "\n";
}
/** Callback para el campo "Post-production API key".
*/
function aicc_settings_apikposproduccion_callback() {
$valor = '';
$options = get_option( 'aicc_settings' );
if ( isset( $options['aicc_apikposproduccion'] ) ) {
$valor = $options['aicc_apikposproduccion'];
}
echo '' . "\n";
}
/** Callback para el campo "AI model".
*/
function aicc_settings_modelo_callback() {
// Selección del modelo de IA.
$modelo = aicc_conf_modelo();
echo '
';
esc_html_e( 'This model is used only by the legacy OpenAI fallback. WordPress AI Client providers use the priorities below.', 'ai-content-creator' );
echo '
';
$texto = '' . __( 'GPT-6 Astra', 'ai-content-creator' ) . '. ' . __( 'Maximum quality, complex or important articles', 'ai-content-creator' );
aicc_mostrar_campo_radio_modelo( $modelo, 'gpt-6-astra', $texto );
$texto = __( 'GPT-6.1 Sol', 'ai-content-creator' ) . ' ' . __( 'Best overall option for writing articles', 'ai-content-creator' );
aicc_mostrar_campo_radio_modelo( $modelo, 'gpt-6.1-sol', $texto );
$texto = __( 'GPT-6 Luna', 'ai-content-creator' ) . ' ' . __( 'Low-cost articles, drafts, and high-volume usage', 'ai-content-creator' );
aicc_mostrar_campo_radio_modelo( $modelo, 'gpt-6-luna', $texto );
if ( in_array( $modelo, aicc_modelos_legacy(), true ) ) {
$texto = __( 'Legacy model retained from the current settings. Choose another model to replace it.', 'ai-content-creator' );
aicc_mostrar_campo_radio_modelo( $modelo, $modelo, $texto );
}
}
/** Callback para el campo "AI Client model priorities".
*/
function aicc_settings_ai_client_prioridades_callback() {
$valor = aicc_conf_ai_client_prioridades();
echo '' . "\n";
echo ' ';
esc_html_e( 'One provider and model per line, separated by |. Leave empty to use the WordPress AI provider default.', 'ai-content-creator' );
echo ' ';
esc_html_e( 'These priorities are tried before the legacy OpenAI fallback.', 'ai-content-creator' );
echo '';
}
/** Callback para el campo "Article length in words".
*/
function aicc_settings_longitud_callback() {
$valor = aicc_conf_longitud();
echo '' . "\n";
echo ' ';
esc_html_e( 'For guidance only, the final decision is up to the AI. [Default: 500]', 'ai-content-creator' );
echo ' ';
esc_html_e( 'Greater effectiveness in GPT-4.', 'ai-content-creator' );
echo '';
}
/** Callback para el campo "Time limit in seconds".
*/
function aicc_settings_timeout_callback() {
$valor = aicc_conf_timeout();
echo '' . "\n";
echo " \n";
/* translators: %s: default time limit value in seconds. */
echo esc_html( sprintf( __( 'Time limit for reply. After waiting this time for IA reply, the connection will be closed and considered an error. [Default: %s]', 'ai-content-creator' ), aicc_default_timeout() ) );
echo "\n";
}
/** Callback para el campo "Language of created articles".
*/
function aicc_settings_idioma_callback() {
$valor_actual = aicc_conf_idioma();
$idiomas_soportados = aicc_idiomas();
echo '\n";
}
/** Callback para el campo "Tone of created articles".
*/
function aicc_settings_tono_callback() {
$valor_actual = aicc_conf_tono();
$tonos_soportados = aicc_tonos();
echo '\n";
}
/** Callback para el campo "Table of contents".
*/
function aicc_settings_tablacontenidos_callback() {
$valor_actual = aicc_conf_tablacontenidos();
echo " ";
esc_html_e( 'Start with an introduction and a table of contents.', 'ai-content-creator' );
echo ' ';
esc_html_e( 'Recommended for SEO.', 'ai-content-creator' );
echo '';
}
/** Callback para el campo "Editors".
*/
function aicc_settings_editorescrean_callback() {
$valor_actual = aicc_conf_editorescrean();
echo " ";
esc_html_e( 'Editors can use AI to create articles.', 'ai-content-creator' );
}
/** Devuelve la capacidad requerida para crear artículos utilizando el plugin.
*
* @return string La capacidad requerida para crear artículos con la IA.
*/
function aicc_requisito_crear() {
$capacidad = 'manage_options';
if ( aicc_conf_editorescrean() ) {
$capacidad = 'edit_posts';
}
return $capacidad;
}
/** Muestra el campo para el botón de un modelo.
*
* @param string $modelo_elegido El modelo elegido actualmente en la configuración.
* @param string $modelo_seleccionable El modelo que se puede seleccionar.
* @param string $texto HTML adicional para mostrar junto al botón de radio.
*/
function aicc_mostrar_campo_radio_modelo( $modelo_elegido, $modelo_seleccionable, $texto = '' ) {
echo "\n";
echo " \n";
}
/** Valida el conjunto de los valores de entrada de la configuración del plugin.
*
* @param array $input Los valores de entrada de la configuración del plugin.
* @return array Los valores de entrada validados.
*/
function aicc_settings_validate( $input ) {
// Valida diferentes campos.
$input = aicc_settings_validate_openaikey( $input );
$input = aicc_settings_validate_posproduccion_url( $input );
$input = aicc_settings_validate_posproduccion_key( $input );
$input = aicc_settings_validate_posproduccion_par( $input );
$input = aicc_settings_validate_modelo( $input );
$input = aicc_settings_validate_ai_client_prioridades( $input );
$input = aicc_settings_validate_longitud( $input );
$input = aicc_settings_validate_timeout( $input );
$input = aicc_settings_validate_idioma( $input );
$input = aicc_settings_validate_tono( $input );
$input = aicc_settings_validate_tablacontenidos( $input );
$input = aicc_settings_validate_editorescrean( $input );
return $input;
}
/** Valida la longitud del artículo en palabras introducido en el panel de configuración del plugin.
*
* @param array $input Array asociativo que contiene los valores ingresados en el panel de configuración del plugin.
* @return array Array asociativo con los valores validados y ajustados según sea necesario.
*/
function aicc_settings_validate_longitud( $input ) {
// Inicializa variables para la validación de la longitud.
$mensaje_error = __( 'Article length in words', 'ai-content-creator' ) . ': ';
$setting = 'aicc_longitud';
$error_code = '';
$cantidad_minima = 100;
$cantidad_maxima = 2500;
$unidad = __( 'words', 'ai-content-creator' );
// Realiza diferentes validaciones en función de las condiciones especificadas.
if ( empty( $input[ $setting ] ) ) {
// Caso en que el campo está vacío.
$error_code = 'aicc_longitud requerido';
$mensaje_error .= __( 'Required field.', 'ai-content-creator' );
$input[ $setting ] = aicc_conf_longitud();
} elseif ( ! is_numeric( $input[ $setting ] ) ) {
// Caso en que el valor no es numérico.
$error_code = 'aicc_longitud no numerica';
$mensaje_error .= __( 'Value must be numeric.', 'ai-content-creator' );
$input[ $setting ] = aicc_conf_longitud();
} elseif ( filter_var( $input[ $setting ], FILTER_VALIDATE_INT ) === false ) {
// Caso en que el valor no es un entero.
$error_code = 'aicc_longitud no entera';
$mensaje_error .= __( 'Value must be an integer.', 'ai-content-creator' );
$input[ $setting ] = aicc_conf_longitud();
} elseif ( $input[ $setting ] < $cantidad_minima ) {
// Caso en que el valor es menor que la cantidad mínima exigida.
$error_code = 'aicc_longitud minima';
/* translators: %1$s: valor mínimo, %2$s: unidad. */
$mensaje_error .= esc_html( sprintf( __( 'Minimum value is %1$s %2$s.', 'ai-content-creator' ), $cantidad_minima, $unidad ) );
$input[ $setting ] = $cantidad_minima;
} elseif ( $input[ $setting ] > $cantidad_maxima ) {
// Caso en que el valor es mayor que la cantidad máxima permitida.
$error_code = 'aicc_longitud maxima';
/* translators: %1$s: valor máximo, %2$s: unidad. */
$mensaje_error .= esc_html( sprintf( __( 'Maximum value is %1$s %2$s.', 'ai-content-creator' ), $cantidad_maxima, $unidad ) );
$input[ $setting ] = $cantidad_maxima;
}
// Si hay un error en la validación, registra el error y muestra el mensaje correspondiente.
if ( $error_code ) {
add_settings_error( $setting, $error_code, $mensaje_error );
}
// Devuelve el array de entrada con los valores validados y ajustados según sea necesario.
return $input;
}
/** Validación de la clave API de OpenAI en el panel de configuración del plugin.
*
* @param array $input Array asociativo que contiene los valores ingresados en el panel de configuración del plugin.
* @return array Array asociativo con los valores validados y ajustados según sea necesario.
*/
function aicc_settings_validate_openaikey( $input ) {
// Inicializa variables para la validación de la clave API de OpenAI.
$mensaje_error = __( 'OpenAI API key', 'ai-content-creator' ) . ': ';
$setting = 'aicc_apikoai';
$error_code = '';
// Realiza la validación de la clave API de OpenAI si no está vacía.
if ( ! empty( $input[ $setting ] ) ) {
// Comprueba si la clave API tiene el formato correcto.
if ( ! preg_match( '/^(sk\-)?[a-zA-Z0-9_\-]{32,256}$/', $input[ $setting ] ) &&
! preg_match( '/^(sk\-project\-)?[a-zA-Z0-9_\-]{32,256}$/', $input[ $setting ] ) &&
! preg_match( '/^(sk\-proj\-)?[a-zA-Z0-9_\-]{32,256}$/', $input[ $setting ] )
) {
$error_code = 'aicc_apikoai defectuosa';
$mensaje_error .= __( 'The format does not seem to be correct.', 'ai-content-creator' );
// Si el formato no es correcto, establece el valor anterior.
$input[ $setting ] = aicc_conf_apikoai();
}
}
// Si hay un error en la validación, registra el error y muestra el mensaje correspondiente.
if ( $error_code ) {
add_settings_error( $setting, $error_code, $mensaje_error );
}
// Devuelve el array de entrada con los valores validados y ajustados según sea necesario.
return $input;
}
/** Valida el tiempo límite en segundos introducido en el panel de configuración del plugin.
*
* @param array $input Array asociativo que contiene los valores ingresados en el panel de configuración del plugin.
* @return array Array asociativo con los valores validados y ajustados según sea necesario.
*/
function aicc_settings_validate_timeout( $input ) {
// Inicializa variables para la validación del límite de tiempo.
$mensaje_error = __( 'Time limit in seconds', 'ai-content-creator' ) . ': ';
$setting = 'aicc_timeout';
$error_code = '';
$cantidad_minima = 30;
$cantidad_maxima = 600;
$unidad = __( 'seconds', 'ai-content-creator' );
// Realiza diferentes validaciones en función de las condiciones especificadas.
if ( empty( $input[ $setting ] ) ) {
// Caso en que el campo está vacío.
$error_code = 'aicc_timeout requerido';
$mensaje_error .= __( 'Required field.', 'ai-content-creator' );
$input[ $setting ] = aicc_conf_timeout();
} elseif ( ! is_numeric( $input[ $setting ] ) ) {
// Caso en que el valor no es numérico.
$error_code = 'aicc_timeout no numerico';
$mensaje_error .= __( 'Value must be numeric.', 'ai-content-creator' );
$input[ $setting ] = aicc_conf_timeout();
} elseif ( filter_var( $input[ $setting ], FILTER_VALIDATE_INT ) === false ) {
// Caso en que el valor no es un entero.
$error_code = 'aicc_timeout no entero';
$mensaje_error .= __( 'Value must be an integer.', 'ai-content-creator' );
$input[ $setting ] = aicc_conf_timeout();
} elseif ( $input[ $setting ] < $cantidad_minima ) {
// Caso en que el valor es menor que la cantidad mínima exigida.
$error_code = 'aicc_timeout minima';
/* translators: %1$s: valor mínimo, %2$s: unidad. */
$mensaje_error .= esc_html( sprintf( __( 'Minimum value is %1$s %2$s.', 'ai-content-creator' ), $cantidad_minima, $unidad ) );
$input[ $setting ] = $cantidad_minima;
} elseif ( $input[ $setting ] > $cantidad_maxima ) {
// Caso en que el valor es mayor que la cantidad máxima permitida.
$error_code = 'aicc_timeout maxima';
/* translators: %1$s: valor máximo, %2$s: unidad. */
$mensaje_error .= esc_html( sprintf( __( 'Maximum value is %1$s %2$s.', 'ai-content-creator' ), $cantidad_maxima, $unidad ) );
$input[ $setting ] = $cantidad_maxima;
}
// Si hay un error en la validación, registra el error y muestra el mensaje correspondiente.
if ( $error_code ) {
add_settings_error( $setting, $error_code, $mensaje_error );
}
// Devuelve el array de entrada con los valores validados y ajustados según sea necesario.
return $input;
}
/** Valida la URL de posproducción.
*
* @param array $input Valores de entrada de la configuración del plugin.
* @return array Valores de entrada validados.
*/
function aicc_settings_validate_posproduccion_url( $input ) {
// Validación de la URL de posproducción.
// Inicio del posible mensaje de error.
$mensaje_error = __( 'Post-production URL', 'ai-content-creator' ) . ': ';
$setting = 'aicc_apiurlposproduccion';
$error_code = '';
if ( ! empty( $input[ $setting ] ) ) {
if ( ! filter_var( $input[ $setting ], FILTER_VALIDATE_URL ) ) {
$error_code = 'aicc_apiurlposproduccion defectuosa';
$mensaje_error .= __( 'The format does not seem to be correct.', 'ai-content-creator' );
$input[ $setting ] = aicc_conf_apiurlposproduccion();
}
}
// Indica error si procede.
if ( $error_code ) {
add_settings_error( $setting, $error_code, $mensaje_error );
}
return $input;
}
/** Valida la clave API de posproducción.
*
* @param array $input Valores de entrada de la configuración del plugin.
* @return array Valores de entrada validados.
*/
function aicc_settings_validate_posproduccion_key( $input ) {
// Validación de la clave API de posproducción.
// Inicio del posible mensaje de error.
$mensaje_error = __( 'Post-production API key', 'ai-content-creator' ) . ': ';
$setting = 'aicc_apikposproduccion';
$error_code = '';
if ( ! empty( $input[ $setting ] ) ) {
// Formato: "aicc-" + sha-256.
if ( ! preg_match( '/^aicc\-[a-fA-F0-9]{64}$/i', $input[ $setting ] ) ) {
$error_code = 'aicc_apikposproduccion defectuosa';
$mensaje_error .= __( 'The format does not seem to be correct.', 'ai-content-creator' );
$input[ $setting ] = aicc_conf_apiurlposproduccion();
}
}
// Indica error si procede.
if ( $error_code ) {
add_settings_error( $setting, $error_code, $mensaje_error );
}
return $input;
}
/** Valida la URL y la clave API de posproducción.
* Además, no tiene utilidad una sin otra.
*
* @param array $input Valores de entrada de la configuración del plugin.
* @return array Valores de entrada validados.
*/
function aicc_settings_validate_posproduccion_par( $input ) {
// La URL de posproducción requiere clave API.
$mensaje_error = __( 'Post-production data', 'ai-content-creator' ) . ': ';
$setting = 'aicc_apiurlposproduccion';
$error_code = '';
if ( empty( $input['aicc_apiurlposproduccion'] ) xor empty( $input['aicc_apikposproduccion'] ) ) {
$error_code = 'aicc_posproduccion insuficiente';
$mensaje_error .= __( 'To use an external post-production service you need the URL address and your key.', 'ai-content-creator' );
}
// Indica error si procede.
if ( $error_code ) {
add_settings_error( $setting, $error_code, $mensaje_error, 'warning' );
}
return $input;
}
/** Valida el modelo de IA seleccionado.
*
* @param array $input Valores de entrada de la configuración del plugin.
* @return array Valores de entrada validados.
*/
function aicc_settings_validate_modelo( $input ) {
// Validación del modelo.
// Inicio del posible mensaje de error.
$mensaje_error = __( 'AI model', 'ai-content-creator' ) . ': ';
$setting = 'aicc_modelo';
$error_code = '';
if ( ! isset( $input[ $setting ] ) ) {
$modelo_actual = aicc_conf_modelo();
if ( aicc_es_valido_modelo( $modelo_actual ) ) {
$input[ $setting ] = $modelo_actual;
return $input;
}
$error_code = 'aicc_modelo_ausente';
} elseif ( ! is_string( $input[ $setting ] ) || ! aicc_es_valido_modelo( $input[ $setting ] ) ) {
$error_code = 'aicc_modelo incorrecto';
}
// Indica error si procede.
if ( $error_code ) {
$mensaje_error .= __( 'The selected model is not available.', 'ai-content-creator' );
$modelo_actual = aicc_conf_modelo();
$input[ $setting ] = aicc_es_valido_modelo( $modelo_actual ) ? $modelo_actual : 'gpt-6.1-sol';
add_settings_error( $setting, $error_code, $mensaje_error, 'error' );
}
return $input;
}
/** Valida las prioridades de proveedor/modelo de WordPress AI Client.
*
* @param array $input Valores de entrada de la configuración del plugin.
* @return array Valores de entrada validados.
*/
function aicc_settings_validate_ai_client_prioridades( $input ) {
$setting = 'aicc_ai_client_prioridades';
if ( empty( $input[ $setting ] ) ) {
$input[ $setting ] = '';
return $input;
}
$lineas = preg_split( "/\r\n|\n|\r/", wp_unslash( $input[ $setting ] ) );
$lineas_normalizadas = array();
foreach ( $lineas as $linea ) {
$linea = trim( $linea );
if ( '' === $linea ) {
continue;
}
$partes = array_map( 'trim', explode( '|', $linea, 2 ) );
$proveedor = isset( $partes[0] ) ? sanitize_key( $partes[0] ) : '';
$modelo = isset( $partes[1] ) ? sanitize_text_field( $partes[1] ) : '';
if ( '' === $proveedor && '' === $modelo ) {
continue;
}
$lineas_normalizadas[] = $proveedor . '|' . $modelo;
}
$input[ $setting ] = implode( "\n", $lineas_normalizadas );
return $input;
}
/** Valida el idioma seleccionado para los artículos creados.
*
* @param array $input Valores de entrada de la configuración del plugin.
* @return array Valores de entrada validados.
*/
function aicc_settings_validate_idioma( $input ) {
// Validación del idioma.
// Inicio del posible mensaje de error.
$mensaje_error = __( 'Language of created articles', 'ai-content-creator' ) . ': ';
$setting = 'aicc_idioma';
$error_code = '';
if ( ! aicc_es_valido_idioma( $input[ $setting ] ) ) {
$error_code = 'aicc_idioma incorrecto';
$mensaje_error .= __( 'The selected language is not available.', 'ai-content-creator' );
$input[ $setting ] = aicc_conf_idioma();
}
// Indica error si procede.
if ( $error_code ) {
add_settings_error( $setting, $error_code, $mensaje_error, 'error' );
}
return $input;
}
/** Valida el tono seleccionado para los artículos creados.
*
* @param array $input Valores de entrada de la configuración del plugin.
* @return array Valores de entrada validados.
*/
function aicc_settings_validate_tono( $input ) {
// Validación del tono.
// Inicio del posible mensaje de error.
$mensaje_error = __( 'Tone of created articles', 'ai-content-creator' ) . ': ';
$setting = 'aicc_tono';
$error_code = '';
if ( ! aicc_es_valido_tono( $input[ $setting ] ) ) {
$error_code = 'aicc_tono incorrecto';
$mensaje_error .= __( 'The selected tone is not available.', 'ai-content-creator' );
$input[ $setting ] = aicc_conf_tono();
}
// Indica error si procede.
if ( $error_code ) {
add_settings_error( $setting, $error_code, $mensaje_error, 'error' );
}
return $input;
}
/** Valida el valor de la tabla de contenidos.
*
* @param array $input Valores de entrada de la configuración del plugin.
* @return array Valores de entrada validados.
*/
function aicc_settings_validate_tablacontenidos( $input ) {
// Validación del valor de la tabla de contenidos.
// Se aceptan '0' o '1' como strings.
// Inicio del posible mensaje de error.
$mensaje_error = __( 'Table of contents', 'ai-content-creator' ) . ': ';
$setting = 'aicc_tablacontenidos';
$error_code = '';
if ( isset( $input[ $setting ] ) ) {
if ( '0' !== $input[ $setting ] && '1' !== $input[ $setting ] ) {
$error_code = 'aicc_tablacontenidos incorrecta';
$mensaje_error .= __( 'Wrong selection.', 'ai-content-creator' );
$input[ $setting ] = aicc_conf_tablacontenidos();
}
} else {
$input[ $setting ] = '0';
}
// Indica error si procede.
if ( $error_code ) {
add_settings_error( $setting, $error_code, $mensaje_error, 'error' );
}
return $input;
}
/** Valida si los editores pueden usar la IA para crear artículos.
*
* @param array $input Valores de entrada de la configuración del plugin.
* @return array Valores de entrada validados.
*/
function aicc_settings_validate_editorescrean( $input ) {
// Validación del valor de la tabla de contenidos.
// Inicio del posible mensaje de error.
$mensaje_error = __( 'Editors', 'ai-content-creator' ) . ': ';
$setting = 'aicc_editorescrean';
$error_code = '';
if ( isset( $input[ $setting ] ) ) {
if ( '0' !== $input[ $setting ] && '1' !== $input[ $setting ] ) {
$error_code = 'aicc_editorescrean incorrecta';
$mensaje_error .= __( 'Wrong selection.', 'ai-content-creator' );
$input[ $setting ] = aicc_conf_editorescrean();
}
} else {
$input[ $setting ] = '0';
}
// Indica error si procede.
if ( $error_code ) {
add_settings_error( $setting, $error_code, $mensaje_error, 'error' );
}
return $input;
}