Отображение сохраненных данных метабокса в выпадающем списке с selected()

10 июл. 2012 г., 22:30:23
Просмотры: 2.56K
Голосов: 0

У меня есть пользовательский метабокс для определенных типов записей, и одно из полей в этом метабоксе - выпадающий список.

Я правильно создаю поле, сохраняю информацию и даже вызываю её правильно (так что я знаю, что она сохраняется корректно), однако при возврате к редактированию записи или её обновлении, выпадающий список всегда показывает первый вариант <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'] ));  
}

Правильно ли я это делаю? Есть ли простой способ реализовать это?

Большое спасибо.

2
Комментарии

Итак, по всей видимости, <?php selected() ?> должен делать это за меня, но я не уверен, где тогда моя ошибка. Если я сохраняю выбор (потому что когда я вызываю выбранное значение в цикле, оно правильное), почему функция не сохраняет это значение как $selected и не сравнивает его правильно с помощью функции selected()?

RCNeil RCNeil
10 июл. 2012 г. 22:47:39

Почему вы экранируете один раз при сохранении и снова при получении данных?

Bainternet Bainternet
10 июл. 2012 г. 22:58:17
Все ответы на вопрос 1
0

<?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", чтобы поместить этот элемент выпадающего списка наверх.

11 июл. 2012 г. 20:27:40