Make WordPress Core

Opened 9 years ago

Last modified 2 weeks ago

#19278 accepted enhancement

Allow WP_List_Table ::get_bulk_items() to receive a nested array and output optgroups

Reported by: goldenapples Owned by: valentinbora
Milestone: 5.5 Priority: normal
Severity: normal Version:
Component: Administration Keywords: has-patch dev-feedback needs-testing
Focuses: ui, administration Cc:


I'm just putting this out there as a possible enhancement to the WP_List_Table... would like feedback as to whether anyone else would find it helpful. If so, I'm more than happy to write up a patch for this.

I think it may be useful to be able to pass a nested array to WP_List_Table::get_bulk_actions() and have it output the options within the subarray in an <optgroup>. My specific use case is in applying meta fields to a custom table. I would like to be able to define something like this in my get_bulk_items function:

function get_bulk_actions() {
	$actions = array(
		'delete' => 'Delete',
		'outofstock' => 'Mark out of stock',
		'applytags' => array(
			'label' => 'Apply tags to products',
			'actions' => array(
				'featured' => 'Featured',
				'sale' => 'On Sale'
	return $actions;

and have the output look something like this:

<select name="action">
	<option value='-1' selected='selected'>Bulk Actions</option>

	<option value='delete'>Delete</option>
	<option value='outofstock'>Mark out of stock</option>
	<optgroup label="Apply tags to products">
		<option value='feature'>Featured</option>
		<option value='sale'>On sale</option>

A very minor feature, and possibly too fringe of a use case to bother with. But I've worked on a couple projects now where being able to specify markup like that would have made that screen more user-friendly. Any thoughts?

Attachments (2)

19278.diff (1.2 KB) - added by mattkeys 2 years ago.
Screen Shot 2020-02-14 at 7.37.01 PM.png (55.2 KB) - added by valentinbora 5 months ago.
Screenshot with 19278.diff applied

Download all attachments as: .zip

Change History (12)

#1 @goldenapples
9 years ago

  • Component changed from General to Administration

#2 @scribu
9 years ago

  • Type changed from feature request to enhancement

Well, officially, you're not even able to add new bulk actions. #16031

It's unlikely this will get any attention until the above is handled.

#3 @goldenapples
9 years ago

Ha! I didn't even see that ticket, and I was wondering why I had to manually trigger $this->process_bulk_actions() in order to get them to work. Thanks... I'll take a look at that ticket.

#4 @chriscct7
6 years ago

  • Keywords needs-patch added

#5 @chriscct7
5 years ago

  • Severity changed from minor to normal

2 years ago

#6 @mattkeys
2 years ago

  • Keywords has-patch dev-feedback needs-testing added; needs-patch removed

Going to play necromancer here a bit and submit a patch for this. I work with WP List Table often and I know many other developers use it in their plugins/themes (despite the codex warning). Optgroup's would be a nice way to organize bulk actions.

The patch I submitted just checks if the current value from the existing bulk actions foreach is an array. If it is, the key becomes the optgroup label, and a new foreach is used to loop over the optgroup's children. Otherwise it proceeds as usual. I also modified a couple variable names to semantic reasons.

I would love to hear back from others about any unforeseen impacts that this change might have.

#7 @valentinbora
5 months ago

  • Focuses ui administration added
  • Milestone changed from Awaiting Review to Future Release
  • Owner set to valentinbora
  • Status changed from new to accepted

@goldenapples thank you for reporting this. I know it's been a (long) while, but this still sounds like a great addition.

Also, thank you @mattkeys for the patch. I'll check it out and get back with updates.

#8 @valentinbora
5 months ago

  • Milestone changed from Future Release to 5.5

Happy to report that it works mighty fine onto [47289]. The patch applies cleanly and works. Here's a code sample:


add_filter( 'bulk_actions-edit-post', 'register_my_bulk_actions' );

function register_my_bulk_actions( $bulk_actions ) {
        $bulk_actions['Grouped actions'] = [
                'hello' => 'Hello',
                'world' => 'World'

        return $bulk_actions;

Looking forward to more feedback from others regarding the addition.

#9 @mattkeys
5 months ago

Thanks for testing, excited to see this get some traction.

This ticket was mentioned in Slack in #core by david.baumwald. View the logs.

2 weeks ago

Note: See TracTickets for help on using tickets.