WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

wp_dropdown_users() WP 2.3.0

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

Работает на основе: get_users()
✈ 1 раз = 0.0039с = очень медленно | 50000 раз = 209.71с = тормоз PHP 7.0.4, WP 4.4.2
Хуки из функции:
Возвращает

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

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

<?php wp_dropdown_users( $args ); ?>

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

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(),
) );
$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 у элемента <select>. (У меня изменение параметра ни на что не повлияло)
По умолчанию: false
show(строка)

Использовать указанную колонку таблицы, в качестве отображаемых полей. Если элемент пустой, то будет показано поле user_login.

  • ID - показывать ID в пунктах
  • user_login - показывать логин имя в пунктах
  • display_name - показывать отображаемое имя в пунктах. По умолчанию
  • display_name_with_login - отображаемое имя и логин. С версии 4.5.

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

echo(логический)
1/true - показать на экране, 0/false - вернуть результат.
По умолчанию: 1
selected(число)
ID пользователя, которого заранее нужно выделить в списке (добавится selected='selected').
По умолчанию: ''
include_selected(логический)
Всегда включать в список пользователей с ID указанном в параметре selected. (где это может понадобится не понял).
По умолчанию: false
name(строка)
Значение атрибута name у тега <select name='user'>. По умолчанию 'user'.
По умолчанию: 'user'
class(строка)
Значение атрибута class у тега <select class=''>. По умолчанию ''.
По умолчанию: ''
id(строка)
Значение атрибута id у тега <select id='name'>. По умолчанию значение параметра 'name'.
По умолчанию: значение параметра 'name'
blog_id(число)
ID блога. Только для мультисайтов. По умолчанию id текущего блога.
По умолчанию: $GLOBALS['blog_id']
who(строка)
Каких пользователей отображать. Пока поддерживается только 'authors'. По умолчанию показывать всех пользователей. Добавлено в WordPress 3.1.
По умолчанию: ''
role(строка/массив)
Название роли пользователей с которой нужно включить в результат. Можно указать несколько названий в массиве. Если указан массив, то пользователь должен иметь все указанные роли одновременно. C WP 4.7.
role__in(массив)
Массив названий ролей пользователей которые будут добавлены в результат. Пользователь будет добавлен в результат, если у него есть хоть одна из указанных ролей. C WP 4.7.
По умолчанию: array()
role__not_in(массив)
Массив названий ролей пользователей, которых нужно исключить из результата. Пользователь не будет добавлен в результат, если у него есть хоть одна из указанных ролей. C WP 4.7.
По умолчанию: array()

Примеры

#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>

Код wp dropdown users: wp-includes/user.php WP 4.8.1

<?php
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(),
	);

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

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

	$query_args = wp_array_slice_assoc( $r, array( 'blog_id', 'include', 'exclude', 'orderby', 'order', 'who', 'role', 'role__in', 'role__not_in' ) );

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

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

	$query_args['fields'] = $fields;

	$show_option_all = $r['show_option_all'];
	$show_option_none = $r['show_option_none'];
	$option_none_value = $r['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 $r          The arguments passed to wp_dropdown_users() combined with the defaults.
	 */
	$query_args = apply_filters( 'wp_dropdown_users_args', $query_args, $r );

	$users = get_users( $query_args );

	$output = '';
	if ( ! empty( $users ) && ( empty( $r['hide_if_only_one_author'] ) || count( $users ) > 1 ) ) {
		$name = esc_attr( $r['name'] );
		if ( $r['multi'] && ! $r['id'] ) {
			$id = '';
		} else {
			$id = $r['id'] ? " id='" . esc_attr( $r['id'] ) . "'" : " id='$name'";
		}
		$output = "<select name='{$name}'{$id} class='" . $r['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, $r['selected'], false );
			$output .= "\t<option value='" . esc_attr( $option_none_value ) . "'$_selected>$show_option_none</option>\n";
		}

		if ( $r['include_selected'] && ( $r['selected'] > 0 ) ) {
			$found_selected = false;
			$r['selected'] = (int) $r['selected'];
			foreach ( (array) $users as $user ) {
				$user->ID = (int) $user->ID;
				if ( $user->ID === $r['selected'] ) {
					$found_selected = true;
				}
			}

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

		foreach ( (array) $users as $user ) {
			if ( 'display_name_with_login' === $show ) {
				/* translators: 1: 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, $r['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 ( $r['echo'] ) {
		echo $html;
	}
	return $html;
}

Cвязанные функции

Из метки: Список (wp_list списки)

Еще из раздела: Остальное

wp_dropdown_users 3 комментария
  • foray cайт: rezvo.com
    @

    Скажите, можно ли сделать так, чтобы нажатием на юзера активировалась ссылка на его профиль?

    Ответить5 лет назад #
    • afer

      У меня тот же вопрос - Как сделать так чтобы при выборе юзера меня перекидывало на его профиль?

      Ответить2.8 года назад #
      • Kama4477

        Это можно сделать с помощью JS. Получаете список в переменную, и добавляете тегу select событие onchange:

        // получаем список
        $users = wp_dropdown_users( array('echo' => 0) );
        // событие
        $js = 'onchange="document.location = \'/profile?user_id=\'+ this.value"';
        // добавляем событие
        $users = str_replace('<select', '<select '. $js, $users);
        // выводим список
        echo $users;

        В результате при изменении значения списка, т.е. выборе другого значения, пользователя перекинет на /profile?user_id={ID_пользователя}

        1
        Ответить2.8 года назад #

Здравствуйте, !

Ваш комментарий