I'm using the group of functions below to create a checkbox in the Quick Edit area of each post in the post listing at `wp-admin/edit.php` that saves a value to a custom field called `headline_news`.

The issue is when the checkbox is checked, Quick Edit saves the value, but it won't save again when I uncheck a checked box. Via PHPMyAdmin, the custom field value changes in the database when saving a checked box, but does not change when unchecking a box and saving.

The first three functions are fairly standard to add a column, echo contents of the column and printing the checkbox. I'm guessing the issue with not saving an unchecked box must be in the saving function on in the Javascripts.



    // Add column to posts listing
    
    add_filter( 'manage_post_posts_columns', 'add_columns' );
    function add_columns( $columns ) {
    
    	$columns['headline_news'] = 'Headline news';
    	return $columns;
    }
    
    
    // Echo contents of custom field in column
    
    add_action( 'manage_posts_custom_column', 'columns_content', 10, 2 );
     function columns_content( $column_name, $post_id ) {
    
        if( $column_name == 'headline_news' ) {
    		$headline_news = get_post_meta( $post_id, 'headline_news', true );
    		echo $headline_news ;
    }
    }
    
    
    
    // Print checkbox in Quick Edit
    
    add_action( 'quick_edit_custom_box', 'quick_edit_add', 10, 2 );
    function quick_edit_add( $column_name, $post_type ) {
     
    	printf( '
    		<input type="checkbox" name="headline_news" class="headline_news"> %s',
    		'Headline news position'
    	);
    }
    
    
    
    // Save checkbox value
    
    add_action( 'save_post', 'qedit_save_post', 10, 2 );
    function qedit_save_post( $post_id, $post ) {
    
        // pointless if $_POST is empty (this happens on bulk edit)
        if ( empty( $_POST ) )
            return $post_id;
    
        // verify quick edit nonce
        if ( isset( $_POST[ '_inline_edit' ] ) && ! wp_verify_nonce( $_POST[ '_inline_edit' ], 'inlineeditnonce' ) )
            return $post_id;
    
        // don't save for autosave
        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
            return $post_id;
    
        // dont save for revisions
        if ( isset( $post->post_type ) && $post->post_type == 'revision' )
            return $post_id;

         // Save only the custom field
    
                $custom_fields = array( 'headline_news' );
    
                foreach( $custom_fields as $field ) {
    
                    if ( array_key_exists( $field, $_POST ) )
                        update_post_meta( $post_id, $field, $_POST[ $field ] );
    
                }
    }
    
    
    
    
    
    //  Javascript functions to set/update checkbox
    
    add_action( 'admin_footer', 'quick_edit_javascript' );
     function quick_edit_javascript() {
    
    	global $current_screen;
    	if ( 'post' != $current_screen->post_type )
    	{
    		return;
    	}
    	?>
    	<script type="text/javascript">
    		function checked_headline_news( fieldValue )
    		{
    			inlineEditPost.revert();
    			jQuery( '.headline_news' ).attr( 'checked', 0 == fieldValue ? false : true );
    		}
    	</script>
    	<?php
    }
    
    
    add_filter( 'post_row_actions', 'expand_quick_edit_link', 10, 2 );
    function expand_quick_edit_link( $actions, $post ) {
    
    	global $current_screen;
     
    	$data = get_post_meta( $post->ID, 'headline_news', true );
    	$data = empty( $data ) ? 0 : 1;
    	$actions['inline hide-if-no-js']    = '<a href="#" class="editinline" title="';
    	$actions['inline hide-if-no-js']    .= esc_attr( 'Edit this item inline' ) . '"';
    	$actions['inline hide-if-no-js']    .= " onclick=\"checked_headline_news('{$data}')\" >";
    	$actions['inline hide-if-no-js']    .= 'Quick Edit';
    	$actions['inline hide-if-no-js']    .= '</a>';
     
    	return $actions;
    }



**Edit 1/23/17**

Changing part of the save function to this now works:

 

        // Save only the custom field
    
       if (isset($_POST['headline_news'])) {
    
    					update_post_meta( $post_id, 'headline_news', 'yes' );
    
    						} else {
    
    					delete_post_meta( $post_id, 'headline_news' );
    
    				}

It allows me to save and delete the custom field from quick edit. But, when I edit a post in the *full post editor* - edit text, change category, etc. - the custom field is deleted. So why is that happening? How do I keep saving in the full post editor from changing this meta field?

And: why are there two checkbox fields in quick edit?:

[![enter image description here][1]][1]


  [1]: https://i.sstatic.net/7XaWD.png