WordPress как на ладони
rgbcode is looking for WordPress developers.

wp_dropdown_users()WP 2.3.0

Выводит на экран выпадающий список пользователей.

Работает на основе: get_users()
1 раз — 0.015165 сек (тормоз) | 50000 раз — 812.51 сек (тормоз) | PHP 7.2.16, WP 5.2
Хуки из функции

Возвращает

Строку. Возвращает или выводит на экран HTML код выпадающего списка пользователей: <select>.

Шаблон использования

wp_dropdown_users( array(
	'show_option_all'         => '',
	'show_option_none'        => '',
	'hide_if_only_one_author' => '',
	'orderby'                 => 'display_name',
	'order'                   => 'ASC',
	'include'                 => '',
	'exclude'                 => '',
	'multi'                   => false,
	'show'                    => 'display_name',
	'echo'                    => true,
	'selected'                => false,
	'include_selected'        => false,
	'name'                    => 'user',
	'id'                      => 'user',
	'class'                   => '',
	'blog_id'                 => $GLOBALS['blog_id'],
	'who'                     => '',
	'role'                    => '',
	'role__in'                => array(),
	'role__not_in'            => array(),
	'capability'          => '',
	'capability__in'      => array(),
	'capability__not_in'  => array(),

) );

Использование

<?php wp_dropdown_users( $args ); ?>
$args(строка/массив)
Массив аргументов, в соответствии с которыми будет сформирован список (см.ниже).
По умолчанию: параметры по умолчанию

Аргументы параметра $args

Кроме перечисленных ниже параметров, также можно передавать параметры функции get_users().

show_option_all(строка)
Текст для пункта списка "выбрать всех" (будет в начале списка).
По умолчанию: ''
show_option_none(строка)
Текст для пункта списка "ни один пользователь" (будет в начале списка или вторым пунктом, если установлен параметр show_option_all).
По умолчанию: ''
orderby(строка)

Ключ по которому сортировать список. Может быть:

  • ID - сортировать по ID пользователя (теоретически получается по порядку регистрации);

  • user_nicename - сортировать по имени;

  • display_name - сортировать по отображаемому имени - по умолчанию.
    По умолчанию: 'display_name'
order(строка)

Направление сортировки:

  • ASC - по порядку - по умолчанию;

  • DESC - в обратном порядке.
    По умолчанию: 'ASC'
include(строка)
ID пользователей, которых нужно показать в списке (указывать через запятую). Например, include=4,5,12 выведет список из трех пользователей.
По умолчанию: ''
exclude(строка)
ID пользователей, которых не нужно показывать в списке (указывать через запятую). Например, include=4,5,12 выведет список из пользователей, кроме 3-х указанных.
По умолчанию: ''
multi(логический)
Пропустить или нет аттрибут ID у элемента . По умолчанию 'user'.
По умолчанию: 'user'
class(строка)
Значение атрибута class у тега . По умолчанию значение параметра 'name'.
По умолчанию: значение параметра 'name'
blog_id(число)
ID блога. Только для мультисайтов. По умолчанию id текущего блога.
По умолчанию: $GLOBALS['blog_id']
who(строка)

Каких пользователей отображать. Может быть:

  • '' — показывать всех пользователей. (По умолчанию)
  • 'authors' — пользователи которые могут публиковать посты (с ролями: author, editor, administrator).

По умолчанию: ''

role(строка/массив)
Название роли пользователей с которой нужно включить в результат. Можно указать несколько названий в массиве. Если указан массив, то пользователь должен иметь все указанные роли одновременно. C WP 4.7.
role__in(массив)
Массив названий ролей пользователей которые будут добавлены в результат. Пользователь будет добавлен в результат, если у него есть хоть одна из указанных ролей. C WP 4.7.
По умолчанию: array()
role__not_in(массив)
Массив названий ролей пользователей, которых нужно исключить из результата. Пользователь не будет добавлен в результат, если у него есть хоть одна из указанных ролей. C WP 4.7.
По умолчанию: array()

Примеры

0

#1 Выведем на экран выпадающий список всех пользователей

Сделаем из него полноценную форму отправки данных (внутри тега <form> и с кнопкой submit):

<h2>Пользователи:</h2>
<form action="<?php bloginfo('url'); ?>" method="get">
   <?php wp_dropdown_users( array('name'=>'author') ); ?>
   <input type="submit" name="submit" value="view" />
</form>
0

#2 Выпадающий список авторов в таблице записей

Смотрите в отдельной заметке.

Список изменений

С версии 2.3.0 Введена.
С версии 4.5.0 Added the 'display_name_with_login' value for 'show'.
С версии 4.7.0 Added the $role, $role__in, and $role__not_in parameters.

Код wp_dropdown_users() WP 6.4.3

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;
}
5 комментариев
    Войти