Skip to main content
Notice removed Current answers are outdated by BlueDogRanch
Bounty Ended with Dave Romsey's answer chosen by BlueDogRanch
Update tags
Link
Dave Romsey
  • 17.9k
  • 11
  • 55
  • 70
Notice added Current answers are outdated by BlueDogRanch
Bounty Started worth 50 reputation by BlueDogRanch
update
Source Link

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

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

Source Link

Why does this Quick Edit checkbox save the value only when unchecked?

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;
}