Функция get_users() в WordPress используется для получения списка пользователей, которые соответствуют заданным критериям. Она предоставляет гибкие возможности для создания запросов, что позволяет получить нужные данные о пользователях, начиная от их ID и заканчивая метаданными, привязанными к конкретным пользователям.
- Параметры функции get_users()
- Еще параметры $args
- Пример 1: Получение всех пользователей с определенной ролью
- Пример 2: Использование поиска по имени
- Пример 3: Поиск по мета-данным
- Пример 4: Фильтрация по нескольким ролям
- Пример 5: Получение конкретных полей
- Пример 6: Получение пользователей с диапазоном значений кастомного поля
- Пример 7: Поиск по нескольким метаполям
- Пример 8: Работа с параметром orderby
- Пример 9: Пагинация и лимитирование результатов
- Заключение
Функция get_users() является оберткой для класса WP_User_Query, который отвечает за выполнение запросов к базе данных пользователей. Этот класс позволяет легко фильтровать и сортировать результаты на основе различных критериев.
get_users( array $args = array() ): array
Возвращаемое значение
Функция возвращает массив пользователей. Тип данных в массиве зависит от параметра fields:
- Если
fields='all'или'all_with_meta', возвращается массив объектовWP_User. - Если
fields— массив полей из таблицыwp_users, возвращается массив объектовstdClass, содержащих только эти поля. - Если
fields— одно поле таблицыwp_users, возвращается массив значений этого поля (например, ID пользователей).
Примечание о безопасности
Особое внимание следует уделять использованию параметра meta_value. Если этот параметр пустой (строка ""), запрос автоматически исключает условие на meta_value и выполняется поиск только по ключу meta_key. Это может привести к неумышленным ошибкам в выборке и потенциальным проблемам с безопасностью, если данные используются в критически важных местах.
Параметры функции get_users()
Параметр $args — это массив настроек, по которым осуществляется запрос к базе данных пользователей. Он включает следующие ключи:
Основные параметры
role(строка | массив): Роли пользователей, которых нужно получить. Можно указать одну роль строкой или несколько ролей в виде массива. Например,'role' => 'administrator'или'role' => array('author', 'subscriber').role__in(массив): Массив ролей, по которым будет производиться выборка. Пользователь должен соответствовать хотя бы одной роли из массива.role__not_in(массив): Исключает пользователей с указанными ролями.
Фильтры по логинам и никнеймам
login(строка): Логин пользователя.login__in(массив): Массив логинов для фильтрации.login__not_in(массив): Исключает пользователей с указанными логинами.nicename(строка): Никнейм пользователя.nicename__in(массив): Массив никнеймов для включения в выборку.nicename__not_in(массив): Массив никнеймов для исключения.
Фильтры по мета-данным
meta_key(строка): Ключ мета-данного, по которому происходит выборка.meta_value(строка): Значение мета-данного для фильтрации.meta_compare(строка): Оператор сравнения для мета-данного (=,!=,>,<, и т.д.).
Параметры сортировки и ограничения
orderby(строка): Параметр для сортировки результата. Например,user_login,user_email,meta_value, и другие.order(строка): Направление сортировки (ASCилиDESC).number(число): Количество пользователей для возврата. Например,number => 10вернет только 10 пользователей.offset(число): Количество пропущенных пользователей в начале выборки.
Еще параметры $args
blog_id(int)
Используется в мультисайтовой установке WordPress. Указывает ID блога, пользователей которого нужно получить.
По умолчанию: текущий блог.capability(string|string[]) (WP 5.9)
Определяет список возможностей (capabilities), которым должны соответствовать пользователи.
По умолчанию:''.capability__in(string[]) (WP 5.9)
Массив возможностей, пользователи с хотя бы одной из которых должны быть включены в выборку.
По умолчанию:array().capability__not_in(string[]) (WP 5.9)
Массив возможностей, пользователи с которыми должны быть исключены из выборки.
По умолчанию:array().who(string) (устарел)
Если указатьauthors, будут показаны только авторы. С WP 5.9 этот параметр устарел, используйтеcapabilitiesилиrole.include(array)
Массив ID пользователей, которых нужно включить в результат, независимо от других условий.exclude(array)
Массив ID пользователей, которых нужно исключить из результата.meta_query(array)
Массив условий по метаполям. Аналогичен параметруmeta_queryвWP_Query.paged(int)
Номер страницы для пагинации.search(string)
Строка для поиска пользователей.search_columns(array)
Массив колонок для поиска по параметруsearch. Возможные значения:ID,login,nicename,email,url.fields(string|array)
Поля, которые будут возвращены для каждого пользователя.
Возможные значения:ID,display_name,user_login,user_nicename,user_email,user_url,user_registered,all,all_with_meta.has_published_posts(bool|string|array)
Указывает, что пользователи должны иметь опубликованные записи определенного типа. Можно указатьtrue, чтобы получить всех пользователей с опубликованными записями любого типа.date_query(array)
Массив условий для фильтрации пользователей по дате регистрации.count_total(bool)
Параметр, используемый для пагинации вWP_User_Query.
По умолчанию:false.cache_results(bool) (WP 6.3)
Нужно ли кэшировать результаты выборки.
По умолчанию:true.
Пример 1: Получение всех пользователей с определенной ролью
Этот код выводит список всех пользователей с ролью «администратор», выводя их email:
$users = get_users( array(
'role' => 'administrator',
'fields' => ['user_email'],
) );
foreach ( $users as $user ) {
echo '<p>' . esc_html( $user->user_email ) . '</p>';
}
Пример 2: Использование поиска по имени
Функция поддерживает поиск по различным полям (логин, email, ID). В следующем примере ищем всех пользователей, имя которых начинается на «john»:
$users = get_users( array(
'search' => 'john*',
'search_columns' => array( 'user_login', 'user_email' ),
) );
foreach ( $users as $user ) {
echo '<p>' . esc_html( $user->user_email ) . '</p>';
}
Пример 3: Поиск по мета-данным
Вы можете искать пользователей, у которых установлено определенное мета-значение. Например, чтобы найти пользователей с ключом city и значением New York:
$users = get_users( array(
'meta_key' => 'city',
'meta_value' => 'New York',
'meta_compare' => '='
) );
foreach ( $users as $user ) {
echo '<p>' . esc_html( $user->display_name ) . '</p>';
}
Пример 4: Фильтрация по нескольким ролям
Чтобы получить список пользователей, у которых есть хотя бы одна из ролей «author» или «subscriber»:
$users = get_users( array(
'role__in' => array( 'author', 'subscriber' ),
) );
foreach ( $users as $user ) {
echo '<p>' . esc_html( $user->display_name ) . '</p>';
}
Пример 5: Получение конкретных полей
Если вам не нужны все данные о пользователе, вы можете ограничить результат конкретными полями. В следующем примере получаем только логин пользователей:
$users = get_users( array(
'fields' => array( 'user_login' ),
) );
foreach ( $users as $user ) {
echo '<p>' . esc_html( $user->user_login ) . '</p>';
}
Пример 6: Получение пользователей с диапазоном значений кастомного поля
Вы также можете использовать операторы для сравнения значений кастомных полей, например, для получения пользователей с определенным диапазоном значений. Допустим, у нас есть поле age, и мы хотим получить пользователей, чей возраст больше 25 лет.
$args = array(
'meta_key' => 'age',
'meta_value' => '25',
'meta_compare' => '>'
);
$users = get_users($args);
foreach ($users as $user) {
echo '<p>' . esc_html($user->display_name) . ', возраст: ' . get_user_meta($user->ID, 'age', true) . '</p>';
}
Здесь мы указываем, что хотим получить всех пользователей, у которых значение метаполя age больше 25. Оператор meta_compare в данном случае — это >, который задает сравнение «больше».
Пример 7: Поиск по нескольким метаполям
Можно объединять несколько условий для поиска по кастомным полям с использованием meta_query. Например, если мы хотим найти всех пользователей старше 30 лет, которые работают в отделе «Продажи»:
$args = array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'age',
'value' => '30',
'compare' => '>'
),
array(
'key' => 'department',
'value' => 'Продажи',
'compare' => '='
)
)
);
$users = get_users($args);
foreach ($users as $user) {
echo '<p>' . esc_html($user->display_name) . ' — ' . get_user_meta($user->ID, 'department', true) . '</p>';
}
Параметр meta_query позволяет добавлять несколько условий поиска. Мы используем relation со значением AND, чтобы объединить условия: возраст должен быть больше 30, а отдел — «Продажи».
Пример 8: Работа с параметром orderby
Параметр orderby в функции get_users позволяет указать поле, по которому нужно отсортировать результат. Возможные значения включают ID, user_login, user_registered, display_name, post_count и другие. Вы также можете сортировать по кастомным полям, используя meta_value или meta_value_num.
Если мы хотим отсортировать пользователей по имени, можно использовать следующий код:
$args = array(
'orderby' => 'display_name',
'order' => 'ASC' // Сортировка по возрастанию
);
$users = get_users($args);
foreach ($users as $user) {
echo '<p>' . esc_html($user->display_name) . '</p>';
}
Мы указываем, что сортировать нужно по значению метаполя age, используя orderby => 'meta_value_num', и задаем сортировку по убыванию с помощью order => 'DESC'.
Пример 9: Пагинация и лимитирование результатов
Для ограничения числа получаемых пользователей используется параметр number, а для пагинации — параметры offset и paged.
Если вам нужно вывести только 5 пользователей:
$args = array(
'number' => 5
);
$users = get_users($args);
foreach ($users as $user) {
echo '<p>' . esc_html($user->display_name) . '</p>';
}
Заключение
Функция get_users является мощным инструментом для работы с пользователями WordPress. Она предоставляет множество возможностей для фильтрации и сортировки пользователей по стандартным и кастомным полям, а также поддерживает расширенные запросы через meta_query.