1

I recently attempted to delete an administrator user. Using the bulk editor, I selected "delete" and was presented with the option to assign their content to another user. However, the dropdown contains thousands of users (subscribers, customers, etc), making it difficult to get to the correct admin user I'd like to reassign the content to.

As a workaround, I edited users.php directly and added 'role' => 'administrator', to the wp_dropdown_users() array. This accomplished what I needed, but I'd like to permanently customize this dropdown the correct way (custom users.php page or a hook/filter that returns administrator users only, from functions.php or an upgrade-safe method).

The full code for that edit is this (line 271 as of WP 5.0.3):

<ul style="list-style:none;">
  <li><label><input type="radio" id="delete_option0" name="delete_option" value="delete" />
  <?php _e('Delete all content.'); ?></label></li>
  <li><input type="radio" id="delete_option1" name="delete_option" value="reassign" />
  <?php echo '<label for="delete_option1">' . __( 'Attribute all content to:' ) . '</label> ';
  wp_dropdown_users( array(
    'name' => 'reassign_user',
    'exclude' => array_diff( $userids, array( $current_user->ID ) ),
    'show' => 'display_name_with_login',
    'role' => 'administrator',
  ) ); ?></li>
</ul>

After some hunting, I found some helpful articles on adding a users page or customizing the users dropdown (if you want to add that somewhere else), but I'm not confident that putting the two concepts together will overwrite the existing users.php dropdown (it may just add a different users page).

How would you suggest pulling this off (ie. filter the users dropdown on the assign content screen)?

Thanks in advance!

1

One way is by using the load-users.php hook which is fired only on the wp-admin/users.php page, and then use the wp_dropdown_users_args filter to modify the parameters (e.g. the role parameter) passed to wp_dropdown_users().

In addition, we check to make sure that the field name is reassign_user which is what WordPress use in the users.php file. This is to prevent modifying the parameters for other users dropdown on the same page.

add_action( 'load-users.php', function(){
    // Make sure the "action" is "delete".
    if ( 'delete' !== filter_input( INPUT_GET, 'action' ) ) {
        return;
    }

    add_filter( 'wp_dropdown_users_args', function( $query_args, $args ){
        if ( 'reassign_user' === $args['name'] ) {
            $query_args['role'] = 'administrator';
        }

        return $query_args;
    }, 10, 2 );
} );

You can check the wp_dropdown_users() source code to see what are the $query_args and $args, their values, etc.

  • 1
    Oh, to have your skills! #SomeDay Thank you for your help, and for the code -- that solved the problem! – Steck Insights Web Design Jan 25 at 4:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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