Order — Wp_Query, Упорядоченный По Meta_Value_Num, Не Получает Сообщения Без Этого Метаполя.

  • Автор темы Seqowar
  • Обновлено
  • 22, Oct 2024
  • #1

У меня есть специальный пользовательский запрос, который должен упорядочивать пользователей по настраиваемому метаполю.

 staff_profile_position 
. Users, who don't have a $args = array( 'role' => 'my_staff_role', 'fields' => 'all', 'meta_key' => 'staff_profile_position', 'meta_query' => array( 'relation' => 'OR', array( 'key' => 'staff_profile_position', 'compare' => 'EXISTS', ), array( 'key' => 'staff_profile_position', 'compare' => 'NOT EXISTS', ), ), 'orderby' => array( 'meta_value_num' => 'ASC', ), ); не извлекаются с помощью этого запроса:

staff_profile_position

Как я могу упорядочить всех пользователей по staff_profile_position , if they have, followed by all the others?

Запрос выше следует этот ответ. Но по-прежнему не работает и извлекает только пользователей, у которых есть это метаполе.

#мета-запрос #заказ #wp-user-query

Seqowar


Рег
16 Oct, 2014

Тем
69

Постов
172

Баллов
527
  • 25, Oct 2024
  • #2

Причина, по которой вы получаете только тех пользователей, у которых есть этот мета_ключ, заключается в том, что вы включаете

 meta_query 
in 'type' => 'NUMERIC' . Это ограничивает результаты теми, у кого есть этот ключ, независимо от каких-либо предложений, которые могут быть у вас в 'orderby' => 'meta_value_num' . This applies to $args = array ( 'role' => 'my_staff_role', 'fields' => 'all', 'meta_query' => array ( 'relation' => 'OR', 'exists' => array ( 'key' => 'staff_profile_position', 'compare' => 'EXISTS', // 'type' => 'NUMERIC', ), 'not_exists' => array ( 'key' => 'staff_profile_position', 'compare' => 'NOT EXISTS', ), ), 'orderby' => 'exists not_exists', ) ; , WP_User_Query and WP_Query .

Начиная с WP 4.2, вы можете «называть» предложения в orderby and then use those "names" in the meta_query пункт, см. Улучшения запросов в WP 4.2: «orderby» и «meta_query».. К сожалению, ссылка на код и записи кодекса для WP_Comment_Query and WP_User_Query не были обновлены, чтобы отразить это, хотя WP_Meta_Query покрывает это.

Итак, вы можете ПОЧТИ получите то, что вам нужно, с помощью следующего:

WP_Query

Примечание: Подражать meta_query (as you have in your question) you would have to include $args в 'meta_key' => '...' clauses. However, that causes all of users без для сортировки вверху, а не внизу (именно поэтому я это закомментировал выше).

Таким образом, если вы можете жить с этими пользователями с ваш мета_ключ должен быть упорядочен по этому ключу, рассматриваемому как строка, а не число, тогда подойдет вышеизложенное.

Если вы не можете, вам придется выполнить 2 отдельных запроса (один для тех пользователей с мета_ключом, упорядоченный по этому ключу, и один для тех пользователей без мета_ключа) и объединить результаты этих двух запросов.

 

Лилия захрабова


Рег
25 Oct, 2020

Тем
100

Постов
186

Баллов
686
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно