web-dev-qa-db-ja.com

選択ボックスは保存されますが管理者の値は更新されません

管理領域のカスタムメタボックスに選択ドロップダウンがあります。ApprovedおよびIn Progressの2つのオプションがあります。オプションを選択して保存すると、データベースは更新されますが、管理領域の値は更新されません。私が見ているのは、選択ボックスに表示されているリストの最初の項目です。つまり、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'] ) );

私は何を逃しましたか?

1
MrFox

selected()の2番目のパラメータは、現在の<option>value属性と一致しなければなりません。それであなたが関連するget_post_meta()によって与えられる値で$selectedを詰め込んだと仮定すると、以下はあなたのために働くでしょう:

<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属性に(したがってpostメタ値には) "ゆるい"バージョン(つまりIn Progressの代わりにvalue)を使用したいと思いますが、フロントエンドにも変更を加えるには

2
geomagas

これが結局私のために働いたものです。私はこれを使ってメタボックスを追加しました:

<?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 } ?>
2
MrFox