Visualizzare i dati salvati della Meta Box in un menu a discesa con selected()

10 lug 2012, 22:30:23
Visualizzazioni: 2.56K
Voti: 0

Ho una meta-box personalizzata per alcuni custom post type, e uno di questi campi nella meta-box è un menu a discesa.

Sto fornendo il campo correttamente, salvando le informazioni e anche richiamandole correttamente (quindi so che vengono salvate bene), tuttavia, quando torni a modificare il post o aggiornarlo, il menu a discesa mostra sempre la prima opzione <select> elencata, il che potrebbe confondere alcune persone che modificano questi post type in futuro.

Ad esempio, se un editor seleziona "Opzione 2", poi clicca su Pubblica o Aggiorna, "Opzione 2" viene salvata e richiamata nel loop, ma il menu a discesa mostra nuovamente "Opzione 1".

C'è un modo per far sì che l'opzione 'selected' che è stata salvata venga visualizzata in cima, o all'inizio della lista, in modo che appaia all'editor come salvata?

Il mio codice delle funzioni:

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>Prezzo:</label><input name="price" value="<?php echo $price; ?>" />
<label>Posizione : </label>  <br />
<select name="location" id="location">  
    <option value="Opzione 1" <?php selected( $selected, 'Opzione 1' ); ?>>Opzione 1</option>  
    <option value="Opzione 2" <?php selected( $selected, 'Opzione 2' ); ?>>Opzione 2</option>  
</select>
<?php } ?>

e poi salvo le informazioni:

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

Lo sto facendo correttamente? C'è un modo semplice per ottenere questo risultato?

Grazie mille.

2
Commenti

Quindi, apparentemente <?php selected() ?> dovrebbe fare questo per me, ma non sono sicuro dove sia il mio errore a questo punto. Se sto salvando la selezione (perché quando chiamo il valore selezionato nel loop, è corretto), perché la funzione non sta memorizzando quel valore come $selected e confrontandolo correttamente usando la funzione selected()?

RCNeil RCNeil
10 lug 2012 22:47:39

Perché stai eseguendo l'escape una volta durante il salvataggio e di nuovo quando recuperi i dati?

Bainternet Bainternet
10 lug 2012 22:58:17
Tutte le risposte alla domanda 1
0

<?php selected() ?> confronta il valore dei dati memorizzati e quale opzione dovrebbe apparire per prima, il mio errore era che non stavo memorizzando correttamente la variabile per confrontarla.

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

dovrebbe essere cambiato in:

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

Era un semplice errore di sintassi da parte mia, poiché mi riferivo alla variabile in modo errato. Una volta modificato, la funzione <?php selected( $selected, 'Option 1' ); ?> confronterà la variabile con la stringa in quel punto e quindi visualizzerà selected="selected" per posizionare quell'elemento del menu a tendina in cima.

11 lug 2012 20:27:40