Afișarea datelor salvate din Meta Box în meniul drop-down cu selected()

10 iul. 2012, 22:30:23
Vizualizări: 2.56K
Voturi: 0

Am un meta-box personalizat pentru anumite tipuri de postări personalizate, iar unul dintre câmpurile din acest meta-box este un meniu drop-down.

Furnizez câmpul corect, salvez informația și chiar o apelez corect (așadar știu că este salvată corect), totuși, când revii pentru a edita postarea sau pentru a o actualiza, meniul drop-down afișează întotdeauna prima opțiune <select>, ceea ce mă tem că ar putea deruta unele dintre persoanele care editează aceste tipuri de postări în viitor.

De exemplu, dacă un editor selectează "Opțiunea 2", apoi apasă Publică sau Actualizează, "Opțiunea 2" este salvată și afișată în buclă, dar meniul drop-down arată imediat din nou "Opțiunea 1".

Există vreo modalitate de a avea opțiunea 'selectată' care este salvată afișată în partea de sus sau în vârful listei, astfel încât să apară editorului așa cum a fost salvată?

Codul meu din functions:

function meta_options(){
    global $post;
    $custom = get_post_custom($post->ID);
    $price = $custom["price"][0];
    $selected = isset( $values['location'] ) ? esc_attr( $values['location'][0] ) :'';  
?>
<label>Preț:</label><input name="price" value="<?php echo $price; ?>" />
<label>Locație : </label>  <br />
<select name="location" id="location">  
    <option value="Opțiunea 1" <?php selected( $selected, 'Opțiunea 1' ); ?>>Opțiunea 1</option>  
    <option value="Opțiunea 2" <?php selected( $selected, 'Opțiunea 2' ); ?>>Opțiunea 2</option>  
</select>
<?php } ?>

și apoi salvarea acestor informații:

function save_price(){
    global $post;
    update_post_meta($post->ID, "price", $_POST["price"]);
    update_post_meta( $post->ID, 'location', esc_attr( $_POST['location'] ));  
}

Fac acest lucru corect? Există o metodă simplă de a realiza acest lucru?

Mulțumesc mult.

2
Comentarii

Deci, aparent <?php selected() ?> ar trebui să facă asta pentru mine, dar nu sunt sigur unde este eroarea mea în acest moment. Dacă salvez selecția (pentru că atunci când apelez valoarea selectată în buclă, este corectă), de ce funcția nu stochează acea valoare ca $selected și nu o compară corect folosind funcția selected()?

RCNeil RCNeil
10 iul. 2012 22:47:39

De ce escapi o dată când salvezi și din nou când extragi datele?

Bainternet Bainternet
10 iul. 2012 22:58:17
Toate răspunsurile la întrebare 1
0

<?php selected() ?> compară valoarea datelor stocate și care opțiune ar trebui să apară prima, eroarea mea a fost că nu stocam corect variabila pentru a o compara.

$selected = isset( $values['location'] ) ? esc_attr( $values['location'][0] ) : '';

ar trebui schimbat în:

$selected = isset( $custom['location'] ) ? esc_attr( $custom['location'][0] ) : '';

A fost o simplă eroare de sintaxă din partea mea, deoarece mă refeream incorect la variabilă. Odată ce am făcut această modificare, funcția <?php selected( $selected, 'Option 1' ); ?> va compara variabila cu șirul de caractere și va afișa selected="selected" pentru a plasa acea opțiune în partea de sus a listei derulante.

11 iul. 2012 20:27:40