Corresponding support with add_filter( 'bulk_actions-screenid', 'register_my_bulk_actions' ) comes in Wordpress 4.7.
Quote ad:
To add a parameter to the Bulk Actions HTML drop-down element, register the bulk_actions-{screen_id} filter bulk_actions-{screen_id} , which adds the new parameter to the array. Replace {screen_id} with the admin screen identifier to suggest a bulk action.
To add the bulk email action for Eric, we could use the following code:
add_filter( 'bulk_actions-edit-post', 'register_my_bulk_actions' ); function register_my_bulk_actions($bulk_actions) { $bulk_actions['email_to_eric'] = __( 'Email to Eric', 'email_to_eric'); return $bulk_actions; }
To handle the bulk action feed, register the handle_bulk_actions-{screen_id} filter handle_bulk_actions-{screen_id} for the corresponding screen. The filter expects the redirect URL to be changed, so be sure to change the passed $redirect_url . This allows us to transfer the success or failure state to the next request to display a notification to the user. Other callback arguments will differ depending on the screen here to include context-sensitive data.
To add a bulk action handler to send emails, we could use the following code:
add_filter( 'handle_bulk_actions-edit-post', 'my_bulk_action_handler', 10, 3 ); function my_bulk_action_handler( $redirect_to, $doaction, $post_ids ) { if ( $doaction !== 'email_to_eric' ) { return $redirect_to; } foreach ( $post_ids as $post_id ) { // Perform action for each post. } $redirect_to = add_query_arg( 'bulk_emailed_posts', count( $post_ids ), $redirect_to ); return $redirect_to; }
Display notifications. We could use existing notification hooks to let the user know what happened, depending on the state that we set in the URL:
add_action( 'admin_notices', 'my_bulk_action_admin_notice' ); function my_bulk_action_admin_notice() { if ( ! empty( $_REQUEST['bulk_emailed_posts'] ) ) { $emailed_count = intval( $_REQUEST['bulk_emailed_posts'] ); printf( '<div id="message" class="updated fade">' . _n( 'Emailed %s post to Eric.', 'Emailed %s posts to Eric.', $emailed_count, 'email_to_eric' ) . '</div>', $emailed_count ); } }