选择框保存但不更新管理中的值

时间:2015-03-26 作者:MrFox

我在管理区的自定义元框中有一个选择下拉列表。它提供了两种选择ApprovedIn Progress. 当我选择一个选项并保存它时,数据库会更新,但管理区域中的值不会更新。我看到的是选择框中显示的列表中的第一项。i、 e.如果我选择In Progress 并保存管理员演示Approved 作为选定值,即使它保存为In Progress 并显示In Progress 在网站的前端。

这是我的代码:

<label for="myplugin_meta_box_select">Status:</label>
<select name="myplugin_meta_box_select" id="myplugin_meta_box_select">
  <option value="Approved" <?php selected( $selected, \'approved\' ); ?>>Approved</option>
  <option value="In Progress" <?php selected( $selected, \'inprogress\' ); ?>>In Progress</option>
</select>
我用这个来保存它:

if( isset( $_POST[\'myplugin_meta_box_select\'] ) )
        update_post_meta( $post_id, \'myplugin_meta_box_select\', esc_attr( $_POST[\'myplugin_meta_box_select\'] ) );
我错过了什么?

2 个回复
SO网友:geomagas

的第二个参数selected() 必须同意value 当前的属性<option>. 所以假设你已经吃饱了$selected 使用相关get_post_meta(), 以下内容应适用于您:

<label for="myplugin_meta_box_select">Status:</label>
<select name="myplugin_meta_box_select" id="myplugin_meta_box_select">
  <option value="Approved" <?php selected( $selected, \'Approved\' ); ?>>Approved</option>
  <option value="In Progress" <?php selected( $selected, \'In Progress\' ); ?>>In Progress</option>
</select>
旁注:我个人更喜欢使用“迟缓”版本(即。inprogress 而不是In Progress) 对于value 属性(因此对于post meta值),但您也必须对前端进行更改

SO网友:MrFox

这就是最终对我起作用的原因。我用它添加了一个元盒:

<?php add_action( \'add_meta_boxes\', \'so_custom_meta_box\' );
function so_custom_meta_box($post){
add_meta_box(\'so_meta_box\', \'Additional\', \'custom_element_grid_class_meta_box\',     \'event\', \'normal\' , \'high\');
}
add_action(\'save_post\', \'so_save_metabox\');

function so_save_metabox(){ 
global $post;
if(isset($_POST["custom_element_grid_class"])){
    $region = $_POST[\'region_sel\'];
    update_post_meta($post->ID, \'region_sel_meta_box\', $region);
}
}
function custom_element_grid_class_meta_box($post){
$region = get_post_meta($post->ID, \'region_sel_meta_box\', true);
?>   
<label>Region:  </label>
<select name="region_sel" id="region_sel"> 
    <option value="Region1" <?php selected( $region, \'Region1\' ); ?>>Region1</option>
    <option value="Region2" <?php selected( $region, \'Region2\' ); ?>>Region2</option>
</select>
<?php } ?>

结束