I trying to set a meta_box with a single checkbox, everything goes fine, however if I uncheck it and save the post, it marks again as checked, I’ve been taking a look but I cannot find my mistake.
Take a look a my code.
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']);
}
});
Thanks in advance
Here is code I have used before – the main difference looks to me that you are checking if the meta exists rather than what it’s value is to determine if it should be checked.
simple add an else clause to delete the post meta if not checked and your code will do just fine, so change :
to