将所有值保存在“多选”

时间:2016-02-10 19:00:14

标签: php wordpress meta-boxes

我在wordpress中使用多重选择形式的metabox。

<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:

- 按钮 -

现在,如果用户从red选择blueselect 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'] ) );

2 个答案:

答案 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']不仅仅是一个简单的值,而是所有选择的数组。

答案 1 :(得分:0)

将{]添加到name是正确的,但我还需要替换以下保存行:

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的帮助!