guardar y recuperar la entrada de opciones de complemento personalizado

4 minutos de lectura

Soy nuevo en la creación de complementos de wordpress. Quiero crear un complemento que muestre la opción de página personalizada en las opciones de configuración de la sección wp-admin y para guardar el valor de los datos de entrada y recuperarlos, he seguido el tutorial de prensa otoñal

Creé una carpeta en wp-content/plugin/ nombrada new-setting-plugin dentro de la carpeta hay un archivo llamado new-setting-plugin.php por lo que la ruta completa del archivo es wp-content/plugin/new-setting-plugin/new-setting-plugin.php

el código del archivo new-setting-plugin.php se encuentra al final de la tabla. Después de crear el código, fui a la página de complementos de wp-admin e instalé el complemento, todo estuvo bien.

Ahora, cuando presiono el botón “Guardar configuración”, muestra el mensaje “Configuración guardada”, pero no puedo ver el valor dentro de los campos de entrada.

Adjunto mis imágenes para obtener una vista previa de lo que aparece en la página de mi complemento

Cuando voy a la página del complemento, veo los siguientes campos de entrada:
Nueva página de configuración

Ahora estoy ingresando el valor en los campos de entrada:
Ingresando a los campos

Cuando hice clic en el botón “Guardar configuración”, recibí el siguiente mensaje después de actualizar la página
Página después de enviar acción

Aquí está mi código

<?php

add_action('admin_menu', 'add_page');

if ( !function_exists( 'add_page' ) ) {

    //function to add page under setting options in wordpress admin section
    function add_page() {
        add_options_page('New Setting Page', 'New Setting', 'manage_options', 'plugin', 'plugin_options_frontpage');

    }

}

function plugin_options_frontpage() {

?>

<div class="wrap">
<?php screen_icon('users'); ?><h2>New Setting Page title</h2>

<form action="options.php" method="post">

<?php settings_fields('plugin_options'); ?>
<?php do_settings_sections('plugin'); ?>
<table class="form-table"> 

  <tr valign="top">

    <td colspan="2">
        <input name="Submit" type="submit" class="button button-primary" value="<?php esc_attr_e('Save Changes'); ?>" />
    </td>

  </tr>
</table>
</form>

</div>

<?php

}


add_action('admin_init', 'plugin_admin_init');
function plugin_admin_init(){
register_setting( 'plugin_options', 'plugin_options', 'plugin_options_validate' );
add_settings_section('plugin_main', 'Main Settings', 'plugin_section_text', 'plugin');
add_settings_field('plugin_text_input1', 'Input 1', 'plugin_input1', 'plugin', 'plugin_main');
add_settings_field('plugin_text_input2', 'Input 2', 'plugin_input2', 'plugin', 'plugin_main');
}

function plugin_section_text() {
echo '<p>New input setting to be saved.</p>';
}

function plugin_input1() {
$options = get_option('plugin_options');
echo "<input id='plugin_input1' class="normal-text code" name="plugin_options[text_string]" size="30" type="text" value="{$options["text_string']}' />";
}


function plugin_input2() {
$options = get_option('plugin_options');
echo "<input id='plugin_input2' class="normal-text code" name="plugin_options[text_string]" size="30" type="text" value="{$options["text_string']}' />";
}


function plugin_options_validate($input) {
$options = get_option('plugin_options');
$options['text_string'] = trim($input['text_string']);
if(!preg_match('/^[a-z0-9]{32}$/i', $options['text_string'])) {
$options['text_string'] = '';
}
return $options;
}

?>

¿Qué hay de malo en mi código? ¿Cómo puedo corregir mi código? ¿Hay alguna manera de mostrar el valor de los campos de entrada fuera del campo en la misma página en una tabla?

No los verás allí. Tienes que get_options.

Para su código, si lo hace var_export( get_option('plugin_options') ); verá esas configuraciones/valores guardados.

comprobar los criterios de validación.

preg_match('/^[a-z0-9]{32}$/i', $options['text_string'])

Comenta el código dentro de la función de validación y prueba.

function plugin_options_validate($input) {
$options = get_option('plugin_options');
//$options['text_string'] = trim($input['text_string']);
//if(!preg_match('/^[a-z0-9]{32}$/i', $options['text_string'])) {
//$options['text_string'] = '';
//}
return $options;
}

Tienes que cambiar el ‘nombre’ de las entradas:

function manage_lists_cc_input1() {
    $options = get_option('manage_lists_cc_options');
    echo "<input id='manage_lists_cc_input1' class="normal-text code" name="manage_lists_cc_options[0]" size="30" type="text" value="{$options["text_string_0']}' />";
}

function manage_lists_cc_input2() {
    $options = get_option('manage_lists_cc_options');
    echo "<input id='manage_lists_cc_input2' class="normal-text code" name="manage_lists_cc_options[1]" size="30" type="text" value="{$options["text_string_1']}' />";

Y simplemente cambie el script de validación para obtener los valores (este es un ejemplo simple sin validación):

function manage_lists_cc_options_validate($input) {
    $options['text_string_0'] = $input[0];
    $options['text_string_1'] = $input[1];
    return $options;
}

¿Ha sido útil esta solución?