带有复选框的Metabox未更新

时间:2011-11-15 作者:andresmijares

我试图用一个复选框设置一个meta\\u框,一切正常,但是如果我取消选中并保存帖子,它会再次标记为选中,我一直在查看,但我找不到我的错误。

看看我的代码。

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

});
提前感谢

2 个回复
最合适的回答,由SO网友:5t3ph 整理而成

这是我以前使用过的代码——在我看来,主要的区别在于您检查的是元是否存在,而不是它的值是确定是否应该检查它。

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

SO网友:Bainternet

如果没有选中,只需添加一个else子句来删除post meta,您的代码就可以了,所以请更改:

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

结束

相关推荐

使用WPAlChemy MetaBox单选框创建If/Else语句

我正在使用WPAlchemy MetaBox类在我的站点上创建其他MetaBox。其中一个有一个带有一组广播箱的部分。我将其编码如下: <?php $mb->the_field(\'docposs\'); ?> <input type=\"radio\" name=\"<?php $mb->the_name(); ?>\" value=\"yes\"<?php $mb->the_radio_state(\'yes\')?\' ch