Punto "." nel valore dell'opzione interrompe la funzione di salvataggio delle opzioni

24 nov 2010, 00:27:17
Visualizzazioni: 209
Voti: 0

La mia routine di salvataggio delle opzioni del tema è riportata qui sotto. Sto notando che se l'$value['id'] passato dal mio array di opzioni contiene un punto, i dati non vengono passati e le opzioni sembrano interrompersi a quel punto. Dovrei optare per un altro carattere o esiste una soluzione alternativa per utilizzare il punto nel nome di un'opzione?

Ad esempio, questo funziona correttamente:

 "id" => "myTheme_color|sidebar",

ma questo no (nessun dato viene passato per il valore):

 "id" => "myTheme_color.sidebar",

La funzione di salvataggio è:

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
Commenti

Stai facendo due volte la stessa cosa (2xforeach) e la variante precedente potrebbe semplicemente sovrascrivere l'opzione se non è impostata in $_REQUEST. Probabilmente questo è il problema?

hakre hakre
24 nov 2010 01:13:17

Non sono sicuro del perché l'avessi lì, ma l'ho rimosso e non serve a nulla. Apparentemente non puoi usare punti nei nomi delle opzioni quando usi un ciclo for sull'array delle opzioni al momento del salvataggio.

Scott B Scott B
26 nov 2010 06:10:02
Tutte le risposte alla domanda 2
0

I punti e gli spazi vengono sostituiti da PHP per gli indici di array tramite POST e GET. Questo potrebbe causare il tuo problema.

26 nov 2010 22:02:26
1

Non sono sicuro di quale sia il problema qui, questo codice di test funziona bene per me:

$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 );
}

Dando una rapida occhiata al codice sorgente, il punto più probabile in cui update_option potrebbe fallire è se la query SQL per l'inserimento non va a buon fine.

I miei suggerimenti sono di eseguire $wpdb->print_error() dopo l'operazione per verificare eventuali query fallite e di agganciarsi alle azioni update_option_{$option} e updated_option per vedere se vengono attivate (fonte).

26 nov 2010 09:20:26
Commenti

E se non l'hai ancora fatto, aggiungi `define('WP_DEBUG', TRUE);` nell'ambiente di test. Questo potrebbe rivelare maggiori informazioni anche riguardo a $wpdb.

hakre hakre
26 nov 2010 13:32:32