Intereting Posts
Мне нужно сделать перенаправление в functions.php WP_Query с двумя типами сообщений, но требующий категорию только для одного из этих типов сообщений Как можно массово удалить категории без тайм-аута или ошибки 500 Отображение значка на основе типа сообщения Есть ли ярлык для изменения массовых изображений BMP на изображения JPG на сайте? Страница настроек вкладки для плагина Добавить javascript при публикации публикации Обновить фрагмент URL-адреса URL-адреса Canonical Permalink Customizer Selective Refresh не обновляется должным образом с сохраненным значением Как загрузить файл rtl.css без изменения lanuage на persian в wordpress? Как всегда «расширяемые» таксономии «наиболее часто используемых тегов»? Сообщения только на боковой панели Использование xprofile_insert_field Скрипт не уничтожает пользовательские типы сообщений. Вместо этого он дублирует сообщение и генерирует новые версии в корзине Неверный адрес сайта. Как восстановить?

запрашивать пользователей по ролям

У меня есть настраиваемый плагин, который запрашивает пользователей и usermeta, но теперь мне нужно отфильтровать админов из результатов. Очень упрощенная версия моего SQL-запроса:

SELECT * FROM usermeta LEFT JOIN users ON users.ID = user_id WHERE meta_key = 'last_name' AND user_role != 'admin' ORDER BY meta_value ASC LIMIT 0, 25 

user_role не является полем, и я видел, как он хранится как строка конфигурации, но я не вижу, как сделать эквивалентный запрос к этому. Я что-то упускаю?

Благодарю.

Solutions Collecting From Web of "запрашивать пользователей по ролям"

Вы можете использовать эту функцию:

 // get users with specified roles function getUsersWithRole( $roles ) { global $wpdb; if ( ! is_array( $roles ) ) $roles = array_walk( explode( ",", $roles ), 'trim' ); $sql = ' SELECT ID, display_name FROM ' . $wpdb->users . ' INNER JOIN ' . $wpdb->usermeta . ' ON ' . $wpdb->users . '.ID = ' . $wpdb->usermeta . '.user_id WHERE ' . $wpdb->usermeta . '.meta_key = \'' . $wpdb->prefix . 'capabilities\' AND ( '; $i = 1; foreach ( $roles as $role ) { $sql .= ' ' . $wpdb->usermeta . '.meta_value LIKE \'%"' . $role . '"%\' '; if ( $i < count( $roles ) ) $sql .= ' OR '; $i++; } $sql .= ' ) '; $sql .= ' ORDER BY display_name '; $userIDs = $wpdb->get_col( $sql ); return $userIDs; } 

3-я строка внутри функции не работала для меня, так как array_walk возвращает логическое значение вместо требуемого массива. Я изменил строку 3 на:

 $roles = array_map('trim',explode( ",", $roles )); 

И это работает для меня сейчас.