확인란이있는 메타 박스가 업데이트되지 않습니다


10

하나의 확인란을 사용하여 meta_box를 설정하려고했지만 모든 것이 정상적으로 작동하지만 선택을 취소하고 게시물을 저장하면 다시 확인 표시가되어 표시됩니다.하지만 실수를 찾을 수 없습니다.

내 코드를 살펴보십시오.

function am_checkbox_option() {
    global $post;
    $custom = get_post_custom($post->ID);
    $front_event = $custom["front_event"][0];
    wp_nonce_field(__FILE__, 'am_front_event');
    if ( $front_event ) {
        $checked = "checked=\"checked\"";
    } else {
        $checked = "";
    }
?>
    <label>Display Content? (type yes):</label>
    <input type="checkbox" name="front_event" value="true" <?php echo $checked; ?> />
<?php
        }
}

add_action('save_post', function() {
    if ( defined( 'DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;

    global $post;

    if ( $_POST && !wp_verify_nonce($_POST['am_front_event'], __FILE__) ) {
        return;
    }

    if ( isset($_POST['front_event']) ) {
        update_post_meta($post->ID, 'front_event', $_POST['front_event']);
    }

});

미리 감사드립니다

답변:


14

여기에 내가 사용한 코드가 있습니다-주요 차이점은 메타 값이 아닌 메타가 있는지 확인하는 것입니다. 메시지를 확인 해야하는지 결정하는 것입니다.

// Checkbox Meta
add_action("admin_init", "checkbox_init");

function checkbox_init(){
  add_meta_box("checkbox", "Checkbox", "checkbox", "post", "normal", "high");
}

function checkbox(){
  global $post;
  $custom = get_post_custom($post->ID);
  $field_id = $custom["field_id"][0];
 ?>

  <label>Check for yes</label>
  <?php $field_id_value = get_post_meta($post->ID, 'field_id', true);
  if($field_id_value == "yes") $field_id_checked = 'checked="checked"'; ?>
    <input type="checkbox" name="field_id" value="yes" <?php echo $field_id_checked; ?> />
  <?php

}

// Save Meta Details
add_action('save_post', 'save_details');

function save_details(){
  global $post;

if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
    return $post->ID;
}

  update_post_meta($post->ID, "field_id", $_POST["field_id"]);
}

코덱스 페이지 add_meta_boxes의 예에 따라 메타 박스를 추가 하는 작업을 사용 add_metabox하십시오. 또한 게시물 유형과 게시물 객체를 콜백에 전달하는 데 도움이됩니다.
t31os

13

체크하지 않으면 post 메타를 삭제하는 else 절을 ​​추가하면 코드가 정상적으로 작동하므로 변경하십시오.

if ( isset($_POST['front_event']) ) {
    update_post_meta($post->ID, 'front_event', $_POST['front_event']);
}

if ( isset($_POST['front_event']) ) {
    update_post_meta($post->ID, 'front_event', $_POST['front_event']);
}else{
    delete_post_meta($post->ID, 'front_event');
}

2
확인란이 선택되어 있지 않으면 $ _POST 배열에 포함되지 않으며, 선택시에만 전송되므로 else 문이 작동하는 이유는 무엇입니까?
Tom J Nowell
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.