問題描述

我試圖設定一個單個核取方塊的 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']);
}

 });

提前致謝

最佳解決方案

這裡是我以前使用過的程式碼 – 主要區別在於我,你正在檢查元素是否存在,而不是它的值是確定是否應該被檢查。

// 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"]);
}

次佳解決方案

簡單的新增一個 else 子句來刪除 post 元素,如果沒有選中,你的程式碼會做的很好,所以改變:

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');
}

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。