Mostrar datos guardados de Meta Box en un menú desplegable con selected()
Tengo un meta-box personalizado para ciertos tipos de contenido personalizados, y uno de los campos en el meta-box es un menú desplegable.
Estoy proporcionando el campo correctamente, guardando la información, e incluso llamándola correctamente (así que sé que se está guardando adecuadamente), sin embargo, cuando vuelves a editar la entrada, o actualizas, el menú desplegable siempre muestra la primera opción del <select>
, lo que me preocupa que pueda confundir a algunas personas que editen estos tipos de contenido en el futuro.
Por ejemplo, si un editor selecciona "Opción 2", luego presiona Publicar o Actualizar, "Opción 2" se guarda y se llama en el loop, pero el menú desplegable inmediatamente muestra "Opción 1" nuevamente.
¿Hay alguna manera de que la opción 'seleccionada' que se guardó se muestre en la parte superior, o al principio de la lista, para que aparezca al editor como guardada?
Mi código de funciones:
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>Precio:</label><input name="price" value="<?php echo $price; ?>" />
<label>Ubicación : </label> <br />
<select name="location" id="location">
<option value="Opción 1" <?php selected( $selected, 'Opción 1' ); ?>>Opción 1</option>
<option value="Opción 2" <?php selected( $selected, 'Opción 2' ); ?>>Opción 2</option>
</select>
<?php } ?>
y luego guardando esa información:
function save_price(){
global $post;
update_post_meta($post->ID, "price", $_POST["price"]);
update_post_meta( $post->ID, 'location', esc_attr( $_POST['location'] ));
}
¿Estoy haciendo esto correctamente? ¿Hay una manera fácil de lograr esto?
Muchas gracias.
<?php selected() ?>
compara el valor de los datos almacenados y qué opción debería aparecer primero, mi error fue que no estaba almacenando correctamente la variable para compararla.
$selected = isset( $values['location'] ) ? esc_attr( $values['location'][0] ) : '';
debería cambiarse a:
$selected = isset( $custom['location'] ) ? esc_attr( $custom['location'][0] ) : '';
Fue un simple error de sintaxis de mi parte, ya que estaba refiriéndome a la variable incorrectamente. Una vez que se realizó ese cambio, la función <?php selected( $selected, 'Opción 1' ); ?>
comparará la variable vs. el texto en su lugar y luego mostrará selected="selected"
para colocar ese elemento del menú desplegable en la parte superior.
