WordPress.org

Ready to get started?Download WordPress

Codex

Plugin API/Action Reference/bulk edit custom box

Contents

Description

bulk_edit_custom_box is an action that lets a plugin print inputs for custom columns when bulk editing. This action is called one time for each custom column. Custom columns are added with the manage_edit-${post_type}_columns filter. To save the data from the custom inputs, hook the save_post action.

Parameters

A registered action function is passed the following parameters.

$column_name
(string) (required) The name of the column to edit.
Default: None
$post_type
(string) (required) The type of the posts.
Default: None

Note that the action function is passed neither the post ID nor any existing value for the column.

Examples

See quick_edit_custom_box for basis.

Creating Inputs

Reuse function display_custom_quickedit_book from quick_edit_custom_box

add_action( 'bulk_edit_custom_box', 'display_custom_quickedit_book', 10, 2 );

Saving Data

Unlike quick edit's data saving process, we'll save via Ajax calls.

add_action( 'wp_ajax_save_bulk_edit_book', 'save_bulk_edit_book' );
function save_bulk_edit_book() {
	// TODO perform nonce checking
	// get our variables
	$post_ids           = ( ! empty( $_POST[ 'post_ids' ] ) ) ? $_POST[ 'post_ids' ] : array();
	$book_author  = ( ! empty( $_POST[ 'book_author' ] ) ) ? $_POST[ 'book_author' ] : null;
	$inprint = !! empty( $_POST[ 'inprint' ] );

	// if everything is in order
	if ( ! empty( $post_ids ) && is_array( $post_ids ) ) {
		foreach( $post_ids as $post_id ) {
			update_post_meta( $post_id, 'book_author', $book_author );
			update_post_meta( $post_id, 'inprint', $inprint );
		}
	}

	die();
}

Calling Ajax

Our updated scripts/admin_edit.js from quick_edit_custom_box.

(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 $book_author = $( '.column-book_author', $post_row ).html();
			var $inprint = $( '.column-inprint', $post_row ).attr('checked');

			// populate the data
			$( ':input[name="book_author"]', $edit_row ).val( $book_author );
			$( ':input[name="inprint"]', $edit_row ).attr('checked', $inprint );
		}
	};

	$( '#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 $book_author = $bulk_row.find( 'textarea[name="book_author"]' ).val();
		var $inprint = $bulk_row.find( 'input[name="inprint"]' ).attr('checked') ? 1 : 0;

		// 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_book', // 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
				book_author: $book_author,
				inprint: $inprint
			}
		});
	});
})(jQuery);

Change Log

  • Since ??

Source File

bulk_edit_custom_box is located in wp-admin/includes/class-wp-posts-list-table.php.

Related

Actions

Other Resources