Intereting Posts
get_template_directory_uri (), обеспечивающий неправильный путь для img изменение уведомлений по электронной почте из WordPress <wordpress> @ mydomain.net на что-то еще Инструмент импорта / экспорта WordPress фактически экспортирует медиа (изображения)? Используйте переводы wp-admin на передней панели Повторяющиеся поля параметров не сохраняются Как петля в петле (покажите детей, а затем внуков) Как я могу программным образом изменить переменную MySql (foreign_keys_check)? Кнопка Single.php назад к родительской категории get_posts, которым не присвоено определенное настраиваемое поле Как настроить Docker для разработки и развертывания пользовательской темы? Мой подкаталог с другим сайтом wordpress использует основную тему Получать смешанные случайные сообщения категории Удаление метаданных Featured Image получить значение короткого кода Вызов AJAX в бэкэнд приводит к пустой update_option

Как включить метаинформацию пользователя в результирующий массив WP_User_Query?

Я пытаюсь выполнить некоторые довольно сложные пользовательские функции на пользовательском сайте WordPress. Клиент имеет страницу «О нас», которая включает список всех членов команды и их фотографий. Мы пытаемся настроить сайт так, чтобы все, что нужно сделать клиенту для добавления или удаления члена команды на странице About, было бы добавлять или удалять пользователя сайта. В основном, страница About содержит автоматическое заполнение пользователями WordPress определенного уровня пользователя. Я думаю, что это была действительно умная идея, и она отлично работает! Вот код (в functions.php):

function query_team(){ $admin_query = new WP_User_Query( array( 'role' => 'administrator', ) ); $admins = $admin_query->get_results(); $editor_query = new WP_User_Query( array( 'role' => 'editor' ) ); $editors = $editor_query->get_results(); $author_query = new WP_User_Query( array( 'role' => 'author' ) ); $authors = $author_query->get_results(); $contr_query = new WP_User_Query( array( 'role' => 'contributor' ) ); $contrs = $contr_query->get_results(); $users = array_merge($admins, $editors, $authors, $contrs); return $users; } 

Как вы можете видеть, я совмещаю результаты массива нескольких WP_User_Queries, так как Google сообщил мне, что это единственный способ получить ТОЛЬКО пользователей нескольких предварительно определенных групп пользователей.

Теперь я столкнулся с проблемой. Клиент (по праву) хочет иметь возможность сортировать пользователей в том порядке, в котором он хочет. Поэтому я добавил некоторую пользовательскую метаинформацию, называемую sort_order, идея состоит в том, что вы можете ввести номер, а затем WordPress будет сортировать порядок отображения списка пользователей на основе этого номера. Однако проблема заключается в том, что эти запросы на самом деле не представляют собой метаинформацию пользователя – поле «sort_order» не включено ни в один из результатов этих запросов.

В довершение всего, недостаточно, чтобы сортировать пользователей по метаинформации, когда мы делаем запрос; мы должны сортировать их ПОСЛЕ того, как массивы были объединены (например, у администратора может быть более низкий sort_order, чем у автора). Поэтому мне нужно включить метаинформацию пользователя в массив, который вырывает WP_User_Query, объединить все массивы и затем отсортировать этот последний массив, используя метаинформацию пользователя.

TL; DR: как я могу включить метаинформацию пользователя в результирующий массив WP_User_Query?

Спасибо заранее за любую помощь!

Solutions Collecting From Web of "Как включить метаинформацию пользователя в результирующий массив WP_User_Query?"

Для сортировки по мета-полям вам нужно использовать meta_key и meta_value (или meta_value_num):

 array( 'meta_key' => 'sort_order', //This is the custom field to orderby 'orderby' => 'meta_value_num', //for numerical values 'role' => 'Administrator', 'fields' => 'all_with_meta', ); 

Однако … Это, вероятно, будет заказывать результаты перед слиянием … так,

вместо отдельных запросов вы можете использовать meta_query для получения нескольких ролей: ( Получить несколько ролей с помощью get_users )

(Это не проверено)

 global $wpdb; $blog_id = get_current_blog_id(); $user_query = new WP_User_Query( array( 'meta_query' => array( 'relation' => 'OR', array( 'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities', 'value' => 'author', 'compare' => 'like' ), array( 'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities', 'value' => 'editor', 'compare' => 'like' ) ) //Then add the rest of the query 'meta_key' => 'sort_order', //This is the custom field to orderby 'orderby' => 'meta_value_num', //for numerical values //'fields' => 'all_with_meta', //which fields to return ) );