web-dev-qa-db-ja.com

カスタム投稿タイプ - メタフィールドをnullに更新するためのチェックボックスの取得方法

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"] );
4
javy

チェックボックスがオフの場合、投稿メタは「日曜日」にクリアされていないようです。

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;
4
Ryan Meier

チェックされていないチェックボックスは$ _POSTに設定されていないので、それらのメタフィールドを空にする必要があります。

このようなものでうまくいくはずです。

 $sunday = ( isset( $_POST['sunday'] ) ) ? $_POST['sunday'] : "";
 update_post_meta( $post->ID, 'sunday', $sunday );
2
Shane

チェックされていないチェックボックスは$ _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); ?> />
0
Muti Ullah