How to get and edit custom fields if in Quick Edit

I’ve got some custom fields that I would like a user to be able to edit in Quick Edit, I can manage the columns but I’m unable to edit them if Quick Edit is clicked current code with custom fields I’d like to be able to edit:

/* custom columns */
add_filter("manage_edit-programmes_columns", "edit_columns" );
add_action("manage_posts_custom_column", "custom_columns");

function edit_columns($columns)
{
    $columns = array(
        "cb" => "<input type ='checkbox' />",
        "title" => "Schedule id",
        "programme" => "Programme",
        "channel" => "Channel", 
        "onair" => "On Air", 
        "catchup" => "Catchup", 
        "popularity" => "Popularity", 
        "onair" => "On Air", 
        "date" => "Date"
    );
    return $columns;
}

function custom_columns( $column ) {

    global $post;

    switch ( $column )
    {
        case "programme":
            echo get_post_meta($post->ID, 'Programme Name', true);
            break;
        case "channel":
            echo get_the_term_list($post->ID, 'channelnames', '', ', ', '');
            break;
        case "onair":
            echo get_post_meta($post->ID, 'Date Time Start', true);
            break;
        case "catchup":
            echo get_post_meta($post->ID, 'linktovideocatchup', true);
            break;
        case "popularity":
            echo get_post_meta($post->ID, 'popularityfig', true);
            break;
    }
}

Help very much appreciated.

Related posts

Leave a Reply

2 comments

  1. A couple things,

    1. Make sure in your save_post hook you’re checking for DOING_AJAX which is used for saving in quick-edit.
    2. Check out my other question: Quick edit screen customization. The answer I received worked, but I haven’t actually implemented it into my plugin quite yet as it’s not a priority of mine yet.

    Hope that helps you out. 😉

  2. Saving data from Quick Edit and Bulk Edit need JavaScript helpers.

    The following code comes out of a production system using the video custom post type before I wrote the the WordPress bulk edit plugin Custom Bulk/Quick Edit.

    File quick_edit.js

    // @ref http://rachelcarden.com/2012/03/manage-wordpress-posts-using-bulk-edit-and-quick-edit/
    (function($) {
        // we create a copy of the WP inline edit post function
        var $wp_inline_edit = inlineEditPost.edit;
        // and then we overwrite the function with our own code
        inlineEditPost.edit = function( id ) {
            // "call" the original WP edit function
            // we don't want to leave WordPress hanging
            $wp_inline_edit.apply( this, arguments );
    
            // now we take care of our business
    
            // get the post ID
            var $post_id = 0;
            if ( typeof( id ) == 'object' )
                $post_id = parseInt( this.getId( id ) );
    
            if ( $post_id > 0 ) {
                // define the edit row
                var $edit_row = $( '#edit-' + $post_id );
                var $post_row = $( '#post-' + $post_id );
    
                // get the data
                var $additional_copies = $( '.column-additional_copies', $post_row ).html();
                var $main_credits      = $( '.column-main_credits', $post_row ).html();
    
                // populate the data
                $( ':input[name="additional_copies"]', $edit_row ).val( $additional_copies );
                $( ':input[name="main_credits"]', $edit_row ).val( $main_credits );
            }
        };
    
        $( '#bulk_edit' ).live( 'click', function() {
            // define the bulk edit row
            var $bulk_row = $( '#bulk-edit' );
    
            // get the selected post ids that are being edited
            var $post_ids = new Array();
            $bulk_row.find( '#bulk-titles' ).children().each( function() {
                $post_ids.push( $( this ).attr( 'id' ).replace( /^(ttle)/i, '' ) );
            });
    
            // get the data
            var $additional_copies = $bulk_row.find( 'textarea[name="additional_copies"]' ).val();
            var $main_credits      = $bulk_row.find( 'textarea[name="main_credits"]' ).val();
    
            // save the data
            $.ajax({
                url: ajaxurl, // this is a variable that WordPress has already defined for us
                type: 'POST',
                async: false,
                cache: false,
                data: {
                    action: 'save_bulk_edit_video', // this is the name of our WP AJAX function that we'll set up next
                    post_ids: $post_ids, // and these are the 2 parameters we're passing to our function
                    additional_copies: $additional_copies,
                    main_credits: $main_credits
                }
            });
        });
    })(jQuery);
    

    File video-quick-edit.php

    <?php
    /**
     *  Quick Edit and Bulk Edit helper for Media Burn video records
     *
     *  @author Michael Cannon <mc@aihr.us>
     *  @ref http://rachelcarden.com/2012/03/manage-wordpress-posts-using-bulk-edit-and-quick-edit/
     */
    
    add_action( 'bulk_edit_custom_box', 'quick_edit_custom_box_video', 10, 2 );
    add_action( 'quick_edit_custom_box', 'quick_edit_custom_box_video', 10, 2 );
    
    function quick_edit_custom_box_video( $column_name, $post_type ) {
        $slug = 'video';
        if ( $slug !== $post_type )
            return;
    
        if ( ! in_array( $column_name, array( 'additional_copies', 'main_credits' ) ) )
            return;
    
        static $printNonce = true;
        if ( $printNonce ) {
            $printNonce = false;
            wp_nonce_field( plugin_basename( __FILE__ ), 'video_edit_nonce' );
        }
    
    ?>
        <fieldset class="inline-edit-col-right inline-edit-video">
          <div class="inline-edit-col inline-edit-<?php echo $column_name ?>">
            <label class="inline-edit-group">
            <?php
        switch ( $column_name ) {
        case 'additional_copies':
    ?>
                <span class="title">Additional Copies</span>
                <textarea cols="22" rows="1" name="additional_copies" autocomplete="off"></textarea>
                <?php
            break;
        case 'main_credits':
    ?>
                <span class="title">Main Credits</span>
                <textarea cols="22" rows="1" name="main_credits" autocomplete="off"></textarea>
                <?php
            break;
        }
    ?>
            </label>
          </div>
        </fieldset>
        <?php
    }
    
    
    add_action( 'save_post', 'save_video_meta' );
    
    function save_video_meta( $post_id ) {
        // TODO make $slug static
        $slug = 'video';
        if ( $slug !== $_POST['post_type'] )
            return;
    
        if ( !current_user_can( 'edit_post', $post_id ) )
            return;
    
        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
            return;
    
        if ( isset( $post->post_type ) && 'revision' == $post->post_type )
            return;
    
        $_POST += array( "{$slug}_edit_nonce" => '' );
        if ( !wp_verify_nonce( $_POST["{$slug}_edit_nonce"], plugin_basename( __FILE__ ) ) )
            return;
    
        if ( isset( $_REQUEST['additional_copies'] ) )
            update_post_meta( $post_id, 'additional_copies', wp_kses_post( $_REQUEST['additional_copies'] ) );
    
        if ( isset( $_REQUEST['main_credits'] ) )
            update_post_meta( $post_id, 'main_credits', wp_kses_post( $_REQUEST['main_credits'] ) );
    }
    
    
    add_action( 'admin_print_scripts-edit.php', 'admin_edit_video_foot' );
    function admin_edit_video_foot() {
        $slug = 'video';
        // load only when editing a video
        if ( ( isset( $_GET['page'] ) && $slug == $_GET['page'] )
            || ( isset( $_GET['post_type'] ) && $slug == $_GET['post_type'] ) ) {
            wp_enqueue_script( 'admin-quick-edit-video', get_template_directory_uri() . '/functions/user/custom/fitv/quick_edit.js', array( 'jquery', 'inline-edit-post' ), '', true );
        }
    }
    
    
    add_action( 'wp_ajax_save_bulk_edit_video', 'save_bulk_edit_video' );
    function save_bulk_edit_video() {
        $post_ids          = ( ! empty( $_POST[ 'post_ids' ] ) ) ? $_POST[ 'post_ids' ] : array();
        $additional_copies = ( ! empty( $_POST[ 'additional_copies' ] ) ) ? wp_kses_post( $_POST[ 'additional_copies' ] ) : null;
        $main_credits      = ( ! empty( $_POST[ 'main_credits' ] ) ) ? wp_kses_post( $_POST[ 'main_credits' ] ) : null;
    
        if ( ! empty( $post_ids ) && is_array( $post_ids ) ) {
            foreach ( $post_ids as $post_id ) {
                update_post_meta( $post_id, 'additional_copies', $additional_copies );
                update_post_meta( $post_id, 'main_credits', $main_credits );
            }
        }
    
        die();
    }
    
    
    ?>