Wordpressのカスタム投稿タイプには7つのメタフィールドがあります。これら7つは特に曜日(日曜日から土曜日)で、それぞれにチェックボックスがあります。値が "On"の場合、POSTのチェックボックスを正しく設定できましたが、編集ページに戻って選択を解除しようとすると、値はデータベース内で変わりません。
これが私がそれぞれの項目入力に対して持っているものです:
<li><input type="checkbox" name="sunday" <?php if( $meta_sunday == true ) { ?>checked="checked"<?php } ?>" /> Sunday<br /></li>
そして私の更新行:
if(!isset($_POST["sunday"])):
return $post;
endif;
update_post_meta($post->ID, "sunday", $_POST["sunday"] );
チェックボックスがオフの場合、投稿メタは「日曜日」にクリアされていないようです。
If( isset($_POST['sunday']) ){
update_post_meta($post->ID, "sunday", $_POST["sunday"] );
}else{
delete_post_meta($post->ID, "sunday");
}
return $post;
または、値をfalseに設定できます
If( isset($_POST['sunday']) ){
update_post_meta($post->ID, "sunday", true );
}else{
update_post_meta($post->ID, "sunday", false );
}
return $post;
チェックされていないチェックボックスは$ _POSTに設定されていないので、それらのメタフィールドを空にする必要があります。
このようなものでうまくいくはずです。
$sunday = ( isset( $_POST['sunday'] ) ) ? $_POST['sunday'] : "";
update_post_meta( $post->ID, 'sunday', $sunday );
チェックされていないチェックボックスは$ _POSTには設定されず、$ _REQUESTに設定されます。カスタム投稿タイプのチェックボックス値は次のように設定できます。
if ( isset( $_REQUEST['inprint'] ) ) {
update_post_meta($post_id, '_inprint', TRUE);
} else {
update_post_meta($post_id, '_inprint', FALSE);
}
そしてこのようなチェックボックスの値を取得します:
global $post;
$inprint= get_post_meta($post->ID, '_inprint', true);
<input type="checkbox" name="inprint" value='1'<?php checked(1, $inprint); ?> />