Punto "." en el valor de opción afecta la función de guardado de opciones

24 nov 2010, 00:27:17
Vistas: 209
Votos: 0

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>";
            } 
        }
    }
}
2
Comentarios

Estás haciendo dos veces lo mismo (2xforeach) y la variante anterior podría simplemente sobrescribir la opción si no está configurada en $_REQUEST. ¿Probablemente este sea el problema?

hakre hakre
24 nov 2010 01:13:17

No estoy seguro de por qué tenía eso allí, pero lo he eliminado y no sirve de nada. Aparentemente no puedes usar puntos en los nombres de las opciones cuando usas un bucle for en el array de opciones al momento de guardar.

Scott B Scott B
26 nov 2010 06:10:02
Todas las respuestas a la pregunta 2
0

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.

26 nov 2010 22:02:26
1

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).

26 nov 2010 09:20:26
Comentarios

Y si no lo has hecho, agrega `define('WP_DEBUG', TRUE); en el entorno de pruebas. Esto podría revelar más información con $wpdb también.

hakre hakre
26 nov 2010 13:32:32