There are times in WordPress when you need a custom field, but may not want to go through setting up a full custom meta box. Sometimes all you need is a simple checkbox that appears in the publish box. In this how-to, I’ll show you how to add a custom meta checkbox field to the existing post publish box.
Source: https://www.pmg.com/blog/wordpress-how-to-adding-a-custom-checkbox-to-the-post-publish-box/
add_action('post_submitbox_misc_actions', createCustomField);
add_action('save_post', saveCustomField);
function createCustomField () {
$post_id = get_the_ID();
if (get_post_type($post_id) != 'post') {
return;
}
$value = get_post_meta($post_id, '_my_custom_field', true);
wp_nonce_field('my_custom_nonce_'.$post_id, 'my_custom_nonce');
?>
<div class="misc-pub-section misc-pub-section-last">
<label>
<input type="checkbox" value="1" <?php checked($value, true, true); ?> name="_my_custom_field" />
<?php _e('My Custom Checkbox Field', 'pmg'); ?>
</label>
</div>
<?php
}
function saveCustomField ( $post_id ) {
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return;
}
if (
!isset($_POST['my_custom_nonce']) ||
!wp_verify_nonce($_POST['my_custom_nonce'], 'my_custom_nonce_'.$post_id)
) {
return;
}
if ( !current_user_can('edit_post', $post_id) ) {
return;
}
if ( isset($_POST['_my_custom_field']) ) {
update_post_meta($post_id, '_my_custom_field', $_POST['_my_custom_field']);
} else {
delete_post_meta($post_id, '_my_custom_field');
}
}
// Source: https://www.pmg.com/blog/wordpress-how-to-adding-a-custom-checkbox-to-the-post-publish-box/