Punctul "." în valoarea opțiunii funcției de salvare a opțiunilor foobars

24 nov. 2010, 00:27:17
Vizualizări: 209
Voturi: 0

Funcția mea de salvare a opțiunilor temei este prezentată mai jos. Am observat că dacă $value['id'] trimis din array-ul de opțiuni conține un punct, datele nu sunt transmise și opțiunile par să se întrerupă în acel punct. Ar trebui să optez pentru un alt caracter sau există o soluție pentru utilizarea caracterului punct în numele unei opțiuni?

De exemplu, acest cod funcționează corect:

 "id" => "myTheme_color|sidebar",

dar acesta nu funcționează (nu sunt transmise date pentru valoare):

 "id" => "myTheme_color.sidebar",

Funcția de salvare este:

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
Comentarii

Faci același lucru de două ori (2xforeach) și varianta anterioară ar putea suprascrie opțiunea dacă nu este setată în $_REQUEST. Probabil aceasta este problema?

hakre hakre
24 nov. 2010 01:13:17

Nu sunt sigur de ce aveam asta acolo, dar am eliminat-o și nu face niciun bine. Se pare că nu poți folosi puncte în numele opțiunilor atunci când folosești o buclă for pe array-ul de opțiuni la momentul salvării.

Scott B Scott B
26 nov. 2010 06:10:02
Toate răspunsurile la întrebare 2
0

Punctele și spațiile sunt înlocuite de PHP pentru indicii de matrice prin POST și GET. Acest lucru poate cauza problema ta.

26 nov. 2010 22:02:26
1

Nu sunt sigur care este problema aici, acest cod de test funcționează bine pentru mine:

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

După o privire rapidă asupra codului sursă, cel mai probabil punct în care update_option poate eșua este dacă interogarea SQL pentru inserare eșuează.

Sugestiile mele sunt să rulezi $wpdb->print_error() după operație pentru a verifica dacă interogarea a eșuat și să folosești acțiunile update_option_{$option} și updated_option pentru a vedea dacă sunt declanșate (sursă).

26 nov. 2010 09:20:26
Comentarii

Și dacă nu ați făcut-o deja, adăugați `define('WP_DEBUG', TRUE); pe mediul de testare. Acest lucru ar putea dezvălui mai multe informații și despre $wpdb.

hakre hakre
26 nov. 2010 13:32:32