Intereting Posts
Как не обрабатывать категории как теги в фидах Могу ли я использовать одно и то же имя папки как многопользовательский блог? Почему действие customize_register выполняется дважды? Создание другой страницы, чем page.php Получить текущий идентификатор сообщения в качестве переменной в Javascript Как я могу войти в систему как администратор после перенаправления на пользовательскую страницу входа Вставить содержимое в <title> head tag с функцией Страница регистрации в области администратора Сортировка таксономии в алфавитном порядке по мета-позиции, а не по умолчанию is_search был вызван неправильно Импортировать демо-данные в шаблон wordpress страница не найдена для example.com/custom-post-name Добавить скрипты на персонализированный пост добавить / редактировать страницы Не работает Добавить комментарий в поле для каждого опубликованного комментария с помощью SQL Slug добавляет -2, хотя другие сообщения с тем же именем находятся в отдельном типе сообщения

WP_Query orderby не работает с meta_value_num и menu_order

Я создал специальный тип сообщения (sidebar_element), который отображается на боковой панели. На каждом боковом элементе администратор может выбрать, где на боковой панели должен отображаться этот элемент, т.е. 'top', 'middle' или 'bottom' и что значение сохраняется в мета-поле. Значения мета для этих выравниваний составляют 30, 20 и 10.

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

Вот как я пытаюсь добиться всего этого, в моем sidebar.php

$sidebarElems = new WP_Query( array ( 'post_type' => 'sidebar_element', 'posts_per_page' => -1, 'meta_key' => 'sidebar_element_meta_alignment', 'orderby' => 'meta_value_num menu_order', 'order' => 'DESC' ) ); 

Однако это не работает. Элементы сортируются сначала по meta_value_num возрастанию, а затем, правильно, с помощью menu_order . Если я удалю menu_order из meta_values , meta_values будет правильно упорядочен.

Эта вещь сводит меня с ума!

Пожалуйста помоги. Благодарю.

РЕДАКТИРОВАТЬ
Вот SQL-запрос, сгенерированный, когда var_dump($sidebarElems)

 SELECT XXX_posts.* FROM XXX_posts INNER JOIN XXX_postmeta ON (XXX_posts.ID = XXX_postmeta.post_id) WHERE 1=1 AND XXX_posts.post_type = 'sidebar_element' AND (XXX_posts.post_status = 'publish') AND (XXX_postmeta.meta_key = 'sidebar_element_meta_alignment' ) GROUP BY XXX_posts.ID ORDER BY XXX_postmeta.meta_value+0,XXX_posts.menu_order DESC 

ОТВЕТ
Найден ответ, проверьте ниже

Нашел ответ на этот вопрос.

Каким-то образом собственный порядок заказа WordPress не является полностью функциональным при попытке упорядочить несколько значений.

Я решил это, изменив WP_Query на SQL Query и включив второй DESC после _postmeta.meta_value+0

 SELECT XXX_posts.* FROM XXX_posts INNER JOIN XXX_postmeta ON (XXX_posts.ID = XXX_postmeta.post_id) WHERE 1=1 AND XXX_posts.post_type = 'sidebar_element' AND (XXX_posts.post_status = 'publish') AND (XXX_postmeta.meta_key = 'sidebar_element_meta_alignment' ) GROUP BY XXX_posts.ID ORDER BY XXX_postmeta.meta_value+0 DESC,XXX_posts.menu_order DESC