diff --git a/src/wp-includes/author-template.php b/src/wp-includes/author-template.php
index 2646fb94c3..d7b649e769 100644
--- a/src/wp-includes/author-template.php
+++ b/src/wp-includes/author-template.php
@@ -428,29 +428,29 @@ function wp_list_authors( $args = '' ) {
 		'html'          => true,
 		'exclude'       => '',
 		'include'       => '',
+		'role'          => '',
+		'role__in'      => array(),
+		'role__not_in'  => array(),
 	);
 
 	$args = wp_parse_args( $args, $defaults );
 
 	$return = '';
 
-	$query_args           = wp_array_slice_assoc( $args, array( 'orderby', 'order', 'number', 'exclude', 'include' ) );
-	$query_args['fields'] = 'ids';
+	$query_args           = wp_array_slice_assoc( $args, array( 'orderby', 'order', 'number', 'exclude', 'include', 'role', 'role__in', 'role__not_in' ) );
 	$authors              = get_users( $query_args );
 
 	$author_count = array();
 	foreach ( (array) $wpdb->get_results( "SELECT DISTINCT post_author, COUNT(ID) AS count FROM $wpdb->posts WHERE " . get_private_posts_cap_sql( 'post' ) . ' GROUP BY post_author' ) as $row ) {
 		$author_count[ $row->post_author ] = $row->count;
 	}
-	foreach ( $authors as $author_id ) {
-		$posts = isset( $author_count[ $author_id ] ) ? $author_count[ $author_id ] : 0;
+	foreach ( $authors as $author ) {
+		$posts = isset( $author_count[ $author->ID ] ) ? $author_count[ $author->ID ] : 0;
 
 		if ( ! $posts && $args['hide_empty'] ) {
 			continue;
 		}
 
-		$author = get_userdata( $author_id );
-
 		if ( $args['exclude_admin'] && 'admin' === $author->display_name ) {
 			continue;
 		}
diff --git a/tests/phpunit/tests/user/listAuthors.php b/tests/phpunit/tests/user/listAuthors.php
index ccaa733551..8869d66186 100644
--- a/tests/phpunit/tests/user/listAuthors.php
+++ b/tests/phpunit/tests/user/listAuthors.php
@@ -304,4 +304,49 @@ class Tests_User_ListAuthors extends WP_UnitTestCase {
 			)
 		);
 	}
+
+	function test_wp_list_authors_role() {
+		$expected['role'] = '';
+
+		$this->assertEquals(
+			$expected['role'],
+			wp_list_authors(
+				array(
+					'echo' => false,
+					'role' => 'administrator',
+				)
+			)
+		);
+	}
+
+	function test_wp_list_authors_role__in() {
+		$expected['role__in'] = '';
+
+		$this->assertEquals(
+			$expected['role__in'],
+			wp_list_authors(
+				array(
+					'echo' => false,
+					'role__in' => [ 'administrator', 'editor' ],
+				)
+			)
+		);
+	}
+
+	function test_wp_list_authors_role__not_in() {
+		$expected['role__not_in'] =
+			'<li><a href="' . self::$user_urls[1] . '" title="Posts by bob">bob</a></li>' .
+			'<li><a href="' . self::$user_urls[2] . '" title="Posts by paul">paul</a></li>' .
+			'<li><a href="' . self::$user_urls[0] . '" title="Posts by zack">zack</a></li>';
+
+		$this->assertEquals(
+			$expected['role__not_in'],
+			wp_list_authors(
+				array(
+					'echo' => false,
+					'role__not_in' => [ 'administrator', 'editor' ],
+				)
+			)
+		);
+	}
 }
