Intereting Posts
Неопределенное действие индекса Невозможно изменить заголовок Разрешить анонимным пользователям отправлять сообщения на мой сайт для модерации Вступление в Grandchild Terms The Grandfather Term – это родительский Атрибут передачи ошибок в функцию короткого кода Показать add_meta_box, выбрав определенную категорию Проблема с пользовательской таксономией и постоянной привязкой Исключить страницы с помощью настраиваемого поля (с да / нет) для хранения неправильных данных? Отображать пользователей по заказу в соответствии с настраиваемым мета-полем «заказ» shortcode плагина не работает с вызовом запроса ajax Тот же адрес электронной почты для всех комментариев Использование fetch_feed для извлечения элементов с не общим заголовком Как создать пользовательский размер изображения в папке «Загружать»? Как мы можем получить идентификатор пользователя по имени display_name Обрезка миниатюр на конкретные размеры на переднем конце Как преобразовать результаты WP_Query (Custom Post Type, с пользовательскими полями) в JavaScript?

Как включить метаинформацию пользователя в результирующий массив 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?

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

Для сортировки по мета-полям вам нужно использовать 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 ) );