2016-02-10 4 views
0

im, имеющий метабокс в wordpress с формой выбора нескольких точек.Сохранение всех значений в «множественном выборе»

<select name="my_meta_box_select" id="my_meta_box_select" multiple="" style="width:300px; height:400px;"> 
    <option value="red">Red 
    </option> 
    <option value="blue">Blue 
    </option> 
</select> 

До сих пор так хорошо, выбранное значение будет сохранено, и я могу получить его, но я хочу, чтобы оба значения должны быть сохранены.

Например, я хочу сохранить красный и синий цвета и иметь возможность извлекать его из интерфейса. Есть ли способ достичь этого? Есть ли лучшие формы, чем выбор?

Целью является то, что пользователь может выбирать страницы из одного поля выбора в другое, а затем сохранять второе поле выбора.

выберите 1:

красный

синий

зеленый

Выберите 2:

оранжевый

-button-

Теперь, если пользователь, где выбрать red и blue из select 1, а затем нажмите -button- значения будут добавлены, чтобы выбрать 2. Когда я теперь нажмите страницу обновления, я хочу, чтобы сохранить все значения в выберите 2.

Это как я сохраняю из своего текущего поля выбора (но он сохраняет только одно значение)

if(isset($_POST['my_meta_box_select'])) 
    update_post_meta($post_id, 'my_meta_box_select', esc_attr($_POST['my_meta_box_select'])); 
+0

С несколькими полями выбора убедитесь, что вы сделали их массивом. 'name =" my_meta_box_select [] "' сделает ваш '$ _POST ['my_meta_box_select']' фактически содержать все значения в виде массива. Затем вы можете пройти. –

+0

Ну, это просто фантастические новости! Спасибо огромное! – darrrr

+0

Идет публикация официального ответа, так что это все более законно :) –

ответ

1

Часто пропускается, очень просто.

Атрибут name должен позволять отправлять несколько выборов по $_POST в виде массива. Например:

<select name="my_meta_box_select[]" id="my_meta_box_select" multiple="" style="width:300px; height:400px;"> 
    <option value="red">Red 
    </option> 
    <option value="blue">Blue 
    </option> 
</select> 

Обратите внимание на [] в названии: name="my_meta_box_select[]"

Это, наряду с атрибутом multiple, позволит вашим $_POST переменным содержат все выборы, как массив. Тем не менее, $_POST['my_meta_box_select'] будет не просто простым значением, а скорее будет массивом всех выборов.

+0

Кажется, он сохраняет его как массив, но когда я это делаю: $ testVar = get_post_meta ($ GLOBALS ['post'] -> ID, 'my_meta_box_select' , правда); print_r ($ testVar); Он печатает только «Array» То же самое, если я запустил прогиб. Кажется, он сохраняет его как массив, но я не могу получить его элементы каким-то образом. Я не ошибаюсь с $ testVar = get_post_meta ($ GLOBALS ['post'] -> ID, 'my_meta_box_select', true); – darrrr

+0

var_dump ($ testVar); дает мне строку (5) «Array» – darrrr

+0

Так что, похоже, только сохранение слова «Array» вместо значений в массиве, любая идея, как исправить эту проблему? :/ – darrrr

0

добавлением [] к name было правильным, однако я allso необходимо заменить следующие строки сохранения:

update_post_meta($post_id, 'my_meta_box_select', esc_attr($_POST['my_meta_box_select'])); 

со следующим:

update_post_meta($post_id, 'my_meta_box_select', array_map('strip_tags', $_POST['my_meta_box_select'])); 

Большое спасибо за помощь Nate!

+0

Woo! Рад, что ты заработал! Надеюсь, теперь все здорово :) –