3

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.

2

2 Answers 2

0

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. ;)

3
  • eek! head spin, can't see how I add that to my custom_post_type and access my custom fields?
    – erichmond
    Mar 1, 2011 at 21:56
  • So I presume I need to change the form input Name and ID to match my custom field to make it work - right?
    – erichmond
    Mar 2, 2011 at 6:06
  • I personally haven't done this as I've stated in my answer. I was merely passing along the answer I received that looked like it might work. It hasn't been a priority of mine with my current project because it seems whenever something I want to do, something else comes up and I have to go fix that and I forget about the original thing I wanted to do. :/
    – Zack
    Mar 2, 2011 at 6:14
1

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 <[email protected]>
 *  @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();
}


?>
1
  • Link only answers are discouraged. It is a link to another post on the network but the answer should still stand on its own. Otherwise, just post a comment.
    – s_ha_dum
    Sep 30, 2013 at 13:56

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.