WordPress как на ладони
wordpress jino

get_users() WP 3.1

Получает пользователей в соответствии с переданными параметрами.

Работает на базе класса WP_User_Query{}

Используется в: wp_dropdown_users().

Хуков нет.

Возвращает

Массив. Массив объектов с данными о каждом пользователе. Если указано определенное поле в параметре fields, то будет возвращен массив объектов со значениями этого поля:

[ID]                  => 1
[user_login]          => admin
[user_pass]           => $P$Bxudi6gJMk2GRt2ed3xvZ06c1BPZXi/
[user_nicename]       => admin
[user_email]          => admin@host.com
[user_url]            => http://localhost/
[user_registered]     => 2010-06-29 07:08:55
[user_activation_key] => 
[user_status]         => 0
[display_name]        => Richard Branson

Пример возвращаемых данных, когда указано определенное поле, например: array('display_name'):

Array (
	[0] => stdClass Object (
			[display_name] => Richard Branson
		)
)

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

$users = get_users( $args );

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

$args = array(
	'blog_id'      => $GLOBALS['blog_id'],
	'role'         => '',
	'role__in'     => array(),
	'role__not_in' => array(),
	'meta_key'     => '',
	'meta_value'   => '',
	'meta_compare' => '',
	'meta_query'   => array(),
	'include'      => array(),
	'exclude'      => array(),
	'orderby'      => 'login',
	'order'        => 'ASC',
	'offset'       => '',
	'search'       => '',
	'search_columns' => array(),
	'number'       => '',
	'paged'        => 1,
	'count_total'  => false,
	'fields'       => 'all',
	'who'          => '',
	'has_published_posts' => null,
	'date_query'   => array() // смотрите WP_Date_Query
);
$users = get_users( $args );
foreach( $users as $user ){
	// обрабатываем
}
$args(массив)
Параметры по которым будут получены пользователи.
По умолчанию: по умолчанию

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

blog_id(число)
ID текущего блога. Используется при включении мультисайтов.
role(строка)
Роли пользователей, которых нужно получить.
role__in(массив)
Массив названий ролей, пользователей с которыми нужно получить. Получаемый юзер, должен иметь хотя бы одну из указанных ролей.
По умолчанию: array()
role__not_in(массив)
Массив названий ролей, пользователей с которыми нужно исключить из результата. Если у юзера есть указанная роль он будет исключен.
По умолчанию: array()
include(массив)
Массив ID пользователей, которых нужно получить. Будут получены только эти пользователи, независимо от других параметров, не соответствующих этому параметру.
exclude(массив)
Массив ID пользователей, которых нужно исключить из результата.
meta_key(строка)
Название ключа, который должен быть у пользователя, чтобы он попал в отбор.
meta_value(строка)
Значение ключа meta_key. Будут получены пользователи если совпадает значение.
meta_compare(строка)
Оператор сравнения для значения meta_value. Может быть: !=, >, >=, <, или <=. Например указав тут оператор !=, будут получены все пользователи у которых есть поле meta_key со значением не равным meta_value.
meta_query(массив)
Массив данных о meta_key/meta_value. По аналогии с WP_Query.
orderby(строка)

Как сортировать полученный список пользователей?
Можно указать: include, nicename, email, url, registered, display_name, post_count, meta_value, meta_value_num, $meta_key (ключ массива запроса из meta_query).

Заметка: post_count работает только для типа записи post и не работает для произвольных типов записей (справедливо для версии WP 4.6). Обойти это не просто, возможно в будущем это измениться, а пока можно сделать так:

Пусть тип записи называется realty, тогда используйте такой хук прямо перед get_users().

add_action('pre_user_query', 'temp_replace');
function temp_replace($query){
	$query->query_from = str_replace("post_type = 'post'", "post_type = 'realty'", $query->query_from );
};

// Ваш вызов get_users() !!!!!!!!!!!!!!

remove_action('pre_user_query', 'temp_replace');

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

order(строка)
Направление сортировки. ASC - от меньшего к большему (a-я). DESC - от большего к меньшему (я-а).
offset(число)
Отступ от начала полученного списка. Если указать 5, то 5 первых пользователей из полученного списка будут пропущены.
number(число)
Количество пользователей которых нужно получить.
paged(число)
Используется в связке с параметром number. Номер страницы пагинации.
По умолчанию: 1
search(строка)

Запрос для поиска пользователей. Поиск идет по точному вхождению. Когда нужно искать подстроку, используйте в запросе *. Например, если нужно найти пользователя с именем Иван Викторович, то запрос будет выглядеть так: Иван Викторович или Иван* или *Викторович или *Виктор*

Если параметр search_columns не указан, то будет проанализирован поисковой запрос и поиск будет проходить по подходящим колонкам. По умолчанию ищет в: e-mail, URL, ID или имя пользователя (отображаемое имя в поиске не участвует).

search_columns(массив)

Массив названий колонок в которых искать запрос из параметра search.
Может быть: ID, login, nicename, email, url.

Когда нужно установить особый сет колонок, используйте фильтр user_search_columns:

// $search_columns = apply_filters( 'user_search_columns', $search_columns, $search, $this );
add_filter('user_search_columns', function($cols){
	// изменяем $cols
	return $cols;
});

По умолчанию: array()

count_total(логический)
Считать сколько всего пользователей было найдено по запросу. Если пагинация не нужна, то установите false - это немного ускорит запрос.
По умолчанию: true
fields(строка/массив)

Какие поля включить в возвращаемые данные о каждом пользователе.

  • all - все.
  • all_with_meta - будут получены еще и значение метаданных пользователя.
  • ID, display_name, user_login, user_nicename, user_email, user_url, user_registered - поля из таблицы wp_user - будут получены только указанные данные. Эти поля нужно указывать в массиве, даже если нужно получить всего одно поле, например: array('user_email').

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

who(строка)
Если указать authors, то будут показаны только авторы.
По умолчанию: '' (все пользователи)
has_published_posts(логический/массив/строка)

Укажите название типа записи или массив названий. Тогда будут получены пользователи у которых есть опубликованные записи указанного типа.

Можно указать true, тогда будут получены пользователи у которых есть хоть одна опубликованная запись любого публичного типа.

date_query(массив)
Запрос по дате. Смотрите wp_date_query. Работает с колонкой user_registered - когда пользователь был зарегистрирован.

Примеры

#1. Выведем список e-mail всех подписчиков блога с ID 1:

<ul>
<?php
	$blogusers = get_users('blog_id=1&orderby=nicename&role=subscriber');
	foreach ($blogusers as $user) {
		echo '<li>' . $user->user_email . '</li>';
	}
?>
</ul>

#2 Пример с использование поля 'search'

Этот пример найдет и выведет на экран всех пользователей у которых имя, ID или email равен "john".

<ul>
<?php
	$blogusers = get_users('search=john');
	foreach ($blogusers as $user) {
		echo '<li>' . $user->user_email . '</li>';
	}
?>
</ul>

#3 Для поиска также можно использовать знак * до или после запроса.

Знак заменяет любое количество любых символов. Например, чтобы найти всех пользователей у которых ID, имя или email начинается с "jo", используем такой код:

<ul>
<?php
	$blogusers = get_users('search=jo*');
	foreach ($blogusers as $user) {
		echo '<li>' . $user->user_email . '</li>';
	}
?>
</ul>

Если поставить * в начало (*jo), то мы получим пользователей оканчивающихся на jo.

#4 Получим все email администраторов сайта

// получим email администраторов
$users = get_users( array(
	'role'   => 'administrator',
	'fields' => ['user_email'],
) );

$emails = wp_list_pluck( $users, 'user_email' );

/* $emails
Array
(
	[0] => mymail@bk.ru
	[1] => secondmail@list.ru
)
*/

Код get users: wp-includes/user.php WP 4.9

<?php
function get_users( $args = array() ) {

	$args = wp_parse_args( $args );
	$args['count_total'] = false;

	$user_search = new WP_User_Query($args);

	return (array) $user_search->get_results();
}

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

Из метки: _user

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

get_users 11 комментариев
Вопросы 1 Все
  • ZetRider

    То, что нужно, спасибо. Но у Вас не указаны возможности: meta_query

    Ответить4.2 года назад #
  • Алёна

    У меня к Вам банальный вопрос, который завел меня в тупик. Как удалить зарегистрированных пользователей?

    Если просто через админку, то они удаляются но их ID как бы остаётся, если я удалю людей с ID 2,3,4,5 то следующий зарегистрированный получит ID 6. Как бы по логике он должен получить ID 2.
    Удаляла в ручную таблицу wp-user и плагинами чистила. Проблема осталась!

    Ответить1.7 года назад #
    • Kama4558

      Если коротко то никак! Так происходит потому что в базе данных у основной колонки стоит авто-инкремент, т.е. при создании записи предыдущее число увеличивается на 1. Это нужно чтобы все строи со 100% гарантией имели свой уникальный ID. Если строка удалена, то ID потерян и это не страшно.

      У меня встречный вопрос. Зачем вам точный порядок 123456?

      Ну как вариант, можно конечно при удалении пользователя сбрасывать этот инкремент до последнего максимального. Но так надо будет все учитывать и если где-то что-то останется не учтено, новый пользователь может получить возможности или что-то еще от старого. Ну и там еще много разных глюком в теории может быть... Короче, так не делается!

      Ответить1.7 года назад #
      • Алёна

        Да мне точный порядок как бы и не нужен. Дело вот в чем: Когда новый user совершает своей первый вход на сайт, в отдельно заведённой рубрике создаётся пост с тайтлом, например "user-23" вот "23" это его ID. Теперь этот пост - это его профиль на сайте который выводится через отдельный single "single-cat-2.php".

        Я решила отказаться от стандартного "author.php" и сделать профиль пользователя прям из обычного поста, там могу прикрутить комментарии - это как бы открытая личка! Где можно написать что-то для конкретного пользователя в рамках его же профиля. Благодаря вашему блогу там можно ещё много чего "намутить" лиж бы идею придумать.

        Вот, как вы уже понимаете, ссылка на такой профиль выглядит как "site.ru/user-23" для usera с ID "23" и так далее. А у меня пользователи начиная со "2" и до 46-го удалены. Я их нарегала пока заборы городила!

        Вот когда сайт окажется в сети и если какой-то умник начьнёт ID-ды перебирать в адресной строке, до 46-го будет получать 404. В принципи я не знаю зачем волнуюсь по этому поводу, просто хочется порядка во всем.

        Возможно в конце своих деяний, просто поставлю на локалку ещё один WP и настрою все, и в дальнейшем пользователи будут регаться по порядку.

        Ответить1.7 года назад #
        • Kama4558

          Я рекомендую вообще не париться на этот счет, тут порядок не к чему.

          1
          Ответить1.7 года назад #
  • А где почитать про user_status?
    Что значат значения 0, 1, 2?

    Ответить1.4 года назад #
    • Kama4558

      Это поле в таблице wp_users, которое используется в Мультисайтах при перемещении юзера в спам. Вот эту функцию просмотрите: update_user_status

      Ответить1.4 года назад #
  • Скажите, пожалуйста, как можно изменить направление сортировки ASC (аргумент order) так, чтобы первыми шли результаты на кириллице? Т.е. сначала а-я, а затем a-z.

  • Вокм cайт: www.blogalt.ru @

    Добрый день!

    Скажите, как получить список всех пользователей (редакторов и админов), кто редактировал произвольный материал?

    Ответитьмесяц назад #

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

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