wp_dropdown_users()WP 2.3.0

Create dropdown HTML content of users.

The content can either be displayed, which it is by default or retrieved by setting the 'echo' argument. The 'include' and 'exclude' arguments do not need to be used; all users will be displayed in that case. Only one can be used, either 'include' or 'exclude', but not both.

The available arguments are as follows:

1 time — 0.015165 sec (extremely slow) | 50000 times — 812.51 sec (extremely slow) | PHP 7.2.16, WP 5.2
Hooks from the function

Return

String. HTML dropdown list of users.

Usage

wp_dropdown_users( $args );
$args(array|string)

Array or string of arguments to generate a drop-down of users. See WP_User_Query::prepare_query() for additional available arguments.

Default: ''

  • show_option_all(string)
    Text to show as the drop-down default (all).
    Default: ''

  • show_option_none(string)
    Text to show as the drop-down default when no users were found.
    Default: ''

  • option_none_value(int|string)
    Value to use for $show_option_none when no users were found.
    Default: -1

  • hide_if_only_one_author(string)
    Whether to skip generating the drop-down if only one user was found.
    Default: ''

  • orderby(string)
    Field to order found users by. Accepts user fields.
    Default: 'display_name'

  • order(string)
    Whether to order users in ascending or descending order. Accepts 'ASC' (ascending) or 'DESC' (descending).
    Default: 'ASC'

  • include(int[]|string)
    Array or comma-separated list of user IDs to include.
    Default: ''

  • exclude(int[]|string)
    Array or comma-separated list of user IDs to exclude.
    Default: ''

  • multi(true|false|int)
    Whether to skip the ID attribute on the 'select' element. Accepts 1|true or 0|false.
    Default: 0|false

  • show(string)
    User data to display. If the selected item is empty then the 'user_login' will be displayed in parentheses. Accepts any user field, or 'display_name_with_login' to show the display name with user_login in parentheses.
    Default: 'display_name'

  • echo(int|true|false)
    Whether to echo or return the drop-down. Accepts 1|true (echo) or 0|false (return).
    Default: 1|true

  • selected(int)
    Which user ID should be selected.

  • include_selected(true|false)
    Whether to always include the selected user ID in the drop- down.
    Default: false

  • name(string)
    Name attribute of select element.
    Default: 'user'

  • id(string)
    ID attribute of the select element.
    Default: value of $name

  • class(string)
    Class attribute of the select element.
    Default: ''

  • blog_id(int)
    ID of blog (Multisite only).
    Default: ID of the current blog

  • who(string)
    Which type of users to query. Accepts only an empty string or 'authors'.
    Default: ''

  • role(string|array)
    An array or a comma-separated list of role names that users must match to be included in results. Note that this is an inclusive list: users must match each role.
    Default: ''

  • role__in(string[])
    An array of role names. Matched users must have at least one of these roles.
    Default: empty array

  • role__not_in(string[])
    An array of role names to exclude. Users matching one or more of these roles will not be included in results.
    Default: empty array

Examples

0

#1 Display a drop-down list of all users

Let's turn it into a full-fledged data submission form (inside the <form> tag and with a submit button):

<h2>Users:</h2>
<form action="<?php bloginfo('url'); ?>" method="get">

   <?php wp_dropdown_users( [ 'name'=>'author' ] ); ?>

   <input type="submit" name="submit" value="view" />
</form>
0

#2 Drop-down list of authors in the posts table

See separate note.

0

#3 The who argument is no longer valid

Since version 5.9, you’ll need to use the new capabilities or role argument:

New Capability Queries in WordPress 5.9.

Changelog

Since 2.3.0 Introduced.
Since 4.5.0 Added the 'display_name_with_login' value for 'show'.
Since 4.7.0 Added the $role, $role__in, and $role__not_in parameters.

wp_dropdown_users() code WP 6.5.2

function wp_dropdown_users( $args = '' ) {
	$defaults = array(
		'show_option_all'         => '',
		'show_option_none'        => '',
		'hide_if_only_one_author' => '',
		'orderby'                 => 'display_name',
		'order'                   => 'ASC',
		'include'                 => '',
		'exclude'                 => '',
		'multi'                   => 0,
		'show'                    => 'display_name',
		'echo'                    => 1,
		'selected'                => 0,
		'name'                    => 'user',
		'class'                   => '',
		'id'                      => '',
		'blog_id'                 => get_current_blog_id(),
		'who'                     => '',
		'include_selected'        => false,
		'option_none_value'       => -1,
		'role'                    => '',
		'role__in'                => array(),
		'role__not_in'            => array(),
		'capability'              => '',
		'capability__in'          => array(),
		'capability__not_in'      => array(),
	);

	$defaults['selected'] = is_author() ? get_query_var( 'author' ) : 0;

	$parsed_args = wp_parse_args( $args, $defaults );

	$query_args = wp_array_slice_assoc(
		$parsed_args,
		array(
			'blog_id',
			'include',
			'exclude',
			'orderby',
			'order',
			'who',
			'role',
			'role__in',
			'role__not_in',
			'capability',
			'capability__in',
			'capability__not_in',
		)
	);

	$fields = array( 'ID', 'user_login' );

	$show = ! empty( $parsed_args['show'] ) ? $parsed_args['show'] : 'display_name';
	if ( 'display_name_with_login' === $show ) {
		$fields[] = 'display_name';
	} else {
		$fields[] = $show;
	}

	$query_args['fields'] = $fields;

	$show_option_all   = $parsed_args['show_option_all'];
	$show_option_none  = $parsed_args['show_option_none'];
	$option_none_value = $parsed_args['option_none_value'];

	/**
	 * Filters the query arguments for the list of users in the dropdown.
	 *
	 * @since 4.4.0
	 *
	 * @param array $query_args  The query arguments for get_users().
	 * @param array $parsed_args The arguments passed to wp_dropdown_users() combined with the defaults.
	 */
	$query_args = apply_filters( 'wp_dropdown_users_args', $query_args, $parsed_args );

	$users = get_users( $query_args );

	$output = '';
	if ( ! empty( $users ) && ( empty( $parsed_args['hide_if_only_one_author'] ) || count( $users ) > 1 ) ) {
		$name = esc_attr( $parsed_args['name'] );
		if ( $parsed_args['multi'] && ! $parsed_args['id'] ) {
			$id = '';
		} else {
			$id = $parsed_args['id'] ? " id='" . esc_attr( $parsed_args['id'] ) . "'" : " id='$name'";
		}
		$output = "<select name='{$name}'{$id} class='" . $parsed_args['class'] . "'>\n";

		if ( $show_option_all ) {
			$output .= "\t<option value='0'>$show_option_all</option>\n";
		}

		if ( $show_option_none ) {
			$_selected = selected( $option_none_value, $parsed_args['selected'], false );
			$output   .= "\t<option value='" . esc_attr( $option_none_value ) . "'$_selected>$show_option_none</option>\n";
		}

		if ( $parsed_args['include_selected'] && ( $parsed_args['selected'] > 0 ) ) {
			$found_selected          = false;
			$parsed_args['selected'] = (int) $parsed_args['selected'];

			foreach ( (array) $users as $user ) {
				$user->ID = (int) $user->ID;
				if ( $user->ID === $parsed_args['selected'] ) {
					$found_selected = true;
				}
			}

			if ( ! $found_selected ) {
				$selected_user = get_userdata( $parsed_args['selected'] );
				if ( $selected_user ) {
					$users[] = $selected_user;
				}
			}
		}

		foreach ( (array) $users as $user ) {
			if ( 'display_name_with_login' === $show ) {
				/* translators: 1: User's display name, 2: User login. */
				$display = sprintf( _x( '%1$s (%2$s)', 'user dropdown' ), $user->display_name, $user->user_login );
			} elseif ( ! empty( $user->$show ) ) {
				$display = $user->$show;
			} else {
				$display = '(' . $user->user_login . ')';
			}

			$_selected = selected( $user->ID, $parsed_args['selected'], false );
			$output   .= "\t<option value='$user->ID'$_selected>" . esc_html( $display ) . "</option>\n";
		}

		$output .= '</select>';
	}

	/**
	 * Filters the wp_dropdown_users() HTML output.
	 *
	 * @since 2.3.0
	 *
	 * @param string $output HTML output generated by wp_dropdown_users().
	 */
	$html = apply_filters( 'wp_dropdown_users', $output );

	if ( $parsed_args['echo'] ) {
		echo $html;
	}
	return $html;
}