I was racking my brains out with this too and was finally able to find a solution that works. This should work for you, I’ve tested quickly. I’ll present it in 3 parts:
PART 1: ADD THE CUSTOM META BOX
add_action( 'add_meta_boxes', 'add_custom_box' );
function add_custom_box( $post ) {
add_meta_box(
'Meta Box', // ID, should be a string.
'Featured People', // Meta Box Title.
'people_meta_box', // Your call back function, this is where your form field will go.
'post', // The post type you want this to show up on, can be post, page, or custom post type.
'side', // The placement of your meta box, can be normal or side.
'core' // The priority in which this will be displayed.
);
}
PART 2: DEFINE THE “CALLBACK” FUNCTION (spits out the html for the checkboxes)
function people_meta_box($post) {
wp_nonce_field( 'my_awesome_nonce', 'awesome_nonce' );
$checkboxMeta = get_post_meta( $post->ID );
?>
<input type="checkbox" name="bob" id="bob" value="yes" <?php if ( isset ( $checkboxMeta['bob'] ) ) checked( $checkboxMeta['bob'][0], 'yes' ); ?> />Bob<br />
<input type="checkbox" name="bill" id="bill" value="yes" <?php if ( isset ( $checkboxMeta['bill'] ) ) checked( $checkboxMeta['bill'][0], 'yes' ); ?> />Bill<br />
<input type="checkbox" name="steve" id="steve" value="yes" <?php if ( isset ( $checkboxMeta['steve'] ) ) checked( $checkboxMeta['steve'][0], 'yes' ); ?> />Steve<br />
<?php }
PART 3: SAVE THE CHECKBOX VALUES
add_action( 'save_post', 'save_people_checkboxes' );
function save_people_checkboxes( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;
if ( ( isset ( $_POST['my_awesome_nonce'] ) ) && ( ! wp_verify_nonce( $_POST['my_awesome_nonce'], plugin_basename( __FILE__ ) ) ) )
return;
if ( ( isset ( $_POST['post_type'] ) ) && ( 'page' == $_POST['post_type'] ) ) {
if ( ! current_user_can( 'edit_page', $post_id ) ) {
return;
}
} else {
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
}
//saves bob's value
if( isset( $_POST[ 'bob' ] ) ) {
update_post_meta( $post_id, 'bob', 'yes' );
} else {
update_post_meta( $post_id, 'bob', 'no' );
}
//saves bill's value
if( isset( $_POST[ 'bill' ] ) ) {
update_post_meta( $post_id, 'bill', 'yes' );
} else {
update_post_meta( $post_id, 'bill', 'no' );
}
//saves steve's value
if( isset( $_POST[ 'steve' ] ) ) {
update_post_meta( $post_id, 'steve', 'yes' );
} else {
update_post_meta( $post_id, 'steve', 'no' );
}
}