Lo que tengo es lo siguiente, una función que me permite escoger si en el header del theme aparecerá una imagen de cabecera o no y otra que habilitará unos links a redes sociales, twitter, facebook, etc...
La de la cabecera funciona bien, pero la otra no, aquí parte del código:
Código PHP:
Además, tengo una función que me registra opciones por defecto, otra para obtener las opciones de la BD, otra por cada setting para mostrarlos en el administrador del theme que se las muestro. Esta me imprime en pantalla tres campos de texto donde poner las URLs de las redes sociales:Ver original
<?php /** * Register setting options */ add_action( 'admin_init', 'theme_register_setting_options_init' ); function theme_register_setting_options_init(){ // Based on Twentyeleven WordPress Theme register_setting( 'theme_options', 'theme_theme_options', 'theme_theme_options_validate' ); // Register our settings field group add_settings_section( 'general', '', '__return_false', 'theme-options' ); // Register our individual settings fields add_settings_field( 'theme_header_stuff', __( 'Header Options', 't_em' ), 'theme_settings_field_header_stuff', 'theme-options', 'general' ); add_settings_field( 'theme_social_stuff', __( 'Social Network Options', 't_em' ), 'theme_settings_field_socialnetwork_stuff', 'theme-options', 'general' ); } /** * Return an array of header options for Twenty'em */ function theme_header_options(){ 'value' => 'no-header-image', 'label' => __( 'No header image', 't_em' ), 'extend' => '', ), 'value' => 'header-image', 'label' => __( 'Header image', 't_em' ), 'extend' => theme_header_image_extend(), ), ); return apply_filters( 'theme_header_options', $header_options ); } /** * Return an array of social network options for Twenty'em */ function theme_socialnetwork_options(){ 'value' => '', 'name' => 'twitter-stuff', 'label' => __( 'Twitter URL', 't_em' ), ), 'value' => '', 'name' => 'facebook-stuff', 'label' => __( 'Facebook URL', 't_em' ), ), ); return apply_filters( 'theme_socialnetwork_options', $socialnetwork_options ); } ?>
Código PHP:
Y por último una función para validar los datos.Ver original
<?php /** * Render the Socialnetwork setting field */ function theme_settings_field_socialnetwork_stuff(){ $options = theme_get_theme_options(); foreach ( theme_socialnetwork_options() as $social ) : ?> <div class="layout text-option social"> <label> <span><?php echo $social['label'];?></span> <input type="text" name="theme_theme_options['<?php echo $social['name']; ?>']" value="<?php echo esc_attr( $options[$social['name']] ) ?>" /> </label> </div> <?php endforeach; } ?>
Código PHP:
Ver original
<?php /** * Sanitize and validate input. Accepts an array, return a sanitized array. */ function theme_theme_options_validate( $input ){ $output = $defaults = theme_get_default_theme_options(); // Header stuff must be in our array of header stuff options if ( isset( $input['header-stuff'] ) && array_key_exists( $input['header-stuff'], theme_header_options() ) ) : $output['header-stuff'] = $input['header-stuff']; endif; // Archive stuff must be in our array of archive stuff options if ( isset( $input['archive-stuff'] ) && array_key_exists( $input['archive-stuff'], theme_archive_options() ) ) : $output['archive-stuff'] = $input['archive-stuff']; endif; return apply_filters( 'theme_theme_options_validate', $output, $input, $defaults ); } ?>
El código completo del archivo es mucho más largo, pero me he centrado en solo lo más importante, además tengo un par de cosas más que no me insertan los datos en la BD, pero si resuelvo uno, ya seguro resuelvo lo demás.
Algo más, si elimino el tercer parámetro de la función register_setting(), que es un callback a la función de validación, entonces me guarda los datos, pero por ejemplo, en los campos donde se insertan las URLs de las redes sociales, me manda el siguiente error:
Cita:
que esNotice: Undefined index: twitter-stuff in /path/to/file/theme-options.php on line 398
Código PHP:
Ver original
<input type="text" name="theme_theme_options['<?php echo $social['name']; ?>']" value="<?php echo esc_attr( $options[$social['name']] ) ?>" />
Para hacer todo esto me estoy guiando por la Settings API y el archivo theme-options.php que viene en Twentyeleven
Gracias mil de antemano a todos los que me puedan dar una ayuda...