Visualizzare i dati salvati della Meta Box in un menu a discesa con selected()
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.
<?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.
