Make WordPress Core

Opened 9 years ago

Last modified 6 weeks ago

#19278 assigned enhancement

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

Reported by: goldenapples Owned by:
Milestone: 5.6 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 8 months ago.
Screenshot with 19278.diff applied

Download all attachments as: .zip

Change History (15)

#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
8 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
8 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
8 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.

3 months ago

#11 @davidbaumwald
3 months ago

  • Milestone changed from 5.5 to Future Release
  • Owner valentinbora deleted
  • Status changed from accepted to assigned

Nothing stops multiple people from working on the same ticket at the same time. But I'm removing the ticket owner to make it clear no one is actively working on this one(the current owner has not participated in a long period of time).

Also, with Beta 1 landing tomorrow, this ticket is being moved to Future Release. If any maintainer or committer feels the remainder of this ticket can be resolved in time, or wishes to assume ownership during a specific cycle, feel free to update the milestone accordingly.

#12 @SergeyBiryukov
3 months ago

  • Milestone changed from Future Release to 5.6

This ticket was mentioned in Slack in #core-editor by talldanwp. View the logs.

6 weeks ago

Note: See TracTickets for help on using tickets.