Punto "." en el valor de opción afecta la función de guardado de opciones
Mi rutina para guardar opciones del tema está a continuación. Estoy encontrando que si el $value['id'] que se pasa desde mi array de opciones contiene un punto, los datos no se pasan y las opciones parecen romperse en ese punto. ¿Debería optar por otro carácter o existe una solución para usar el carácter punto en un nombre de opción?
Por ejemplo, esto funciona bien:
"id" => "myTheme_color|sidebar",
pero esto no (no se pasan datos para el valor):
"id" => "myTheme_color.sidebar",
La función de guardado es:
function mytheme_add_admin(){
global $themename, $shortname, $options;
if ( $_GET['page'] == basename(__FILE__) )
{
if ( 'save' == $_REQUEST['action'] )
{
foreach ($options as $value)
{
update_option( $value['id'], stripslashes($_REQUEST[$value['id']]) );
}
foreach ($options as $value)
{
if( isset( $_REQUEST[ $value['id'] ] ) )
{
update_option( $value['id'], stripslashes($_REQUEST[ $value['id'] ]) );
echo $value['id'].": ".$_REQUEST[$value['id']]."<br>";
echo $value['id'].": ".stripslashes($_REQUEST[$value['id']])."<br>";
}
}
}
}

Los puntos y espacios son reemplazados por PHP para los índices de arrays a través de POST y GET. Eso puede causar tu problema.

No estoy seguro de cuál es el problema aquí, este código de prueba funciona bien para mí:
$options = array( 'test_option' => array('id' => 'myTheme_color.sidebar') );
$test = 'test';
var_dump($options);
foreach ($options as $value) {
var_dump($value['id']);
update_option( $value['id'], $test );
}
Mirando rápidamente el código fuente, el punto más probable para que update_option
falle es si la consulta SQL para insertarlo falla.
Mis sugerencias son ejecutar $wpdb->print_error()
después de la operación para verificar si hay una consulta fallida y engancharse a las acciones update_option_{$option}
y updated_option
para ver si se están ejecutando (fuente).
