Отображение сохраненных данных метабокса в выпадающем списке с selected()
У меня есть пользовательский метабокс для определенных типов записей, и одно из полей в этом метабоксе - выпадающий список.
Я правильно создаю поле, сохраняю информацию и даже вызываю её правильно (так что я знаю, что она сохраняется корректно), однако при возврате к редактированию записи или её обновлении, выпадающий список всегда показывает первый вариант <select>
, что может сбивать с толку людей, которые редактируют эти записи.
Например, если редактор выбирает "Вариант 2", затем нажимает "Опубликовать" или "Обновить", "Вариант 2" сохраняется и выводится в цикле, но выпадающий список снова показывает "Вариант 1".
Есть ли способ сделать так, чтобы сохраненный выбранный вариант отображался наверху или в начале списка, чтобы редактор видел сохраненное значение?
Мой код функций:
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>Цена:</label><input name="price" value="<?php echo $price; ?>" />
<label>Местоположение : </label> <br />
<select name="location" id="location">
<option value="Option 1" <?php selected( $selected, 'Option 1' ); ?>>Вариант 1</option>
<option value="Option 2" <?php selected( $selected, 'Option 2' ); ?>>Вариант 2</option>
</select>
<?php } ?>
и сохранение этой информации:
function save_price(){
global $post;
update_post_meta($post->ID, "price", $_POST["price"]);
update_post_meta( $post->ID, 'location', esc_attr( $_POST['location'] ));
}
Правильно ли я это делаю? Есть ли простой способ реализовать это?
Большое спасибо.
<?php selected() ?>
сравнивает значение сохраненных данных и какой вариант должен отображаться первым, моей ошибкой было то, что я не сохранял переменную для сравнения правильно.
$selected = isset( $values['location'] ) ? esc_attr( $values['location'][0] ) : ”;
должно быть изменено на:
$selected = isset( $custom['location'] ) ? esc_attr( $custom['location'][0] ) : ”;
Это была простая синтаксическая ошибка с моей стороны, так как я обращался к переменной неправильно. Как только это было исправлено, функция <?php selected( $selected, 'Option 1' ); ?>
будет сравнивать переменную со строкой на месте и затем отображать selected="selected"
, чтобы поместить этот элемент выпадающего списка наверх.
