在 PHP 中将多选下拉选项分配给字符串变量


Assign Multiselect Drop-down Options to a String Variable in PHP

我使用以下代码从用户那里获取国家/地区代码列表,并将其分配给名为"位置"的字符串。

<input
    type="text" 
    class="widefat code" 
    id="edit-menu-item-visibility-<?php echo $item_id; ?>" 
    name="menu-item-visibility[<?php echo $item_id; ?>]" 
    value="<?php echo esc_html( get_post_meta( $item_id, 'locations', true ) ); ?>" />
    <?php echo 'Enter 2-digit country codes separated by commas, e.g. US,CA,SG' ?></br>

如果我想改用以下多选下拉菜单,如何将值作为逗号分隔的列表(字符串(传递给"位置"? 即"美国,加拿大,新加坡">

<select name="chzn-select" class="chzn-select" multiple="true">
    <option value="KH">Cambodia</option>
    <option value="CM">Cameroon</option>
    <option value="CA">Canada</option>
    <option value="SG">Singapore</option>
    <option value="US">United States</option>
</select>

编辑:

以下是变量当前到达数据库的方式:

function update_option_text( $menu_id, $menu_item_db_id, $args ) {
    $meta_value = get_post_meta( $menu_item_db_id, 'locations', true );
    $new_meta_value = stripcslashes( $_POST['menu-item-visibility'][$menu_item_db_id] );
    if( '' == $new_meta_value ) {
        delete_post_meta( $menu_item_db_id, 'locations', $meta_value );
    }
    elseif( $meta_value !== $new_meta_value ) {
        update_post_meta( $menu_item_db_id, 'locations', $new_meta_value );
    }
}

更新:

所选值现在将发送到数据库。但是我似乎可以弄清楚如何在保存表单后保持所选值处于选中状态。

这是我通过蛮力使其工作的非工作尝试:

<option value="AF" <?php $locations = get_post_meta( $item_id, 'locations', true); if(in_array("AF", $locations ))){echo "selected='selected'";}else{echo "";} ?> >Afghanistan</option>

我走在正确的轨道上吗?

只需将select框视为数组,如下所示:

<select name="chzn-select[]" class="chzn-select" multiple="true">

和你的PHP代码:

<?php
if(!empty($_POST["chzn-select"])) {
  $val = implode(",",$_POST["chzn-select"]);
}
?>