Сортировка: пользовательский запрос с orderby meta_value_num THEN по названию

Я пытаюсь запустить пользовательский запрос типа типа, чтобы соответствовать следующим критериям:
сортировать фильмы по годам в порядке убывания,
после этого («внутри» порядка года) по названию в алфавитном порядке.

желаемый выход:
название фильма A, 2006
название фильма Z, 2006

название фильма A, 1996
название фильма Z, 1996

я использую следующий код:

$wp_query = new WP_Query(); $wp_query->query( array( 'post_type' => 'movies', 'distribution' => 'companyA', 'meta_key' => 'year', 'orderby' => 'meta_value_num title', 'order' => 'DESC', 'posts_per_page' => -1, 'post_status' => 'publish', )); 

я попробовал несколько вещей, но я могу получить только этот «обратный» результат:

название фильма A, 1996
название фильма Z, 1996

название фильма A, 2006
название фильма Z, 2006

если я изменяю DESC, ASC, это изменяет сортировку заголовков. но мне нужно применить его к году, а не к названию.

это правильный способ использовать два значения orderby? или мне нужно использовать meta_query или пользовательский SQL?

thx заранее!

Ниже приведен результирующий SQL-запрос из запроса $GLOBALS['wp_query']->request

SELECT wp_posts. *
FROM wp_posts
INNER JOIN wp_term_relationships
ON (wp_posts.id = wp_term_relationships.object_id)
INNER JOIN wp_postmeta
ON (wp_posts.id = wp_postmeta.post_id)
ГДЕ 1 = 1
И (wp_term_relationships.term_taxonomy_id IN (24))
И wp_posts.post_type = 'фильмы'
И (wp_posts.post_status = 'publish')
И (wp_postmeta.meta_key = 'год')
GROUP BY wp_posts.id
ORDER BY wp_postmeta.meta_value + 0,
wp_posts.post_title DESC

Solutions Collecting From Web of "Сортировка: пользовательский запрос с orderby meta_value_num THEN по названию"

Это очень грубо, но нужно сортировать свои сообщения по годам (meta_value), а затем по названию. Это зависит от того, как настроен запрос, поэтому он будет работать только с запросом ниже или с похожими запросами.

 function alter_order_wpse_103181($order,$qry) { remove_filter('posts_orderby','alter_order',1,2); $order = explode(',',$order); $order = implode( ' ASC,',$order); return $order; } add_filter('posts_orderby','alter_order_wpse_103181',1,2); $q = new WP_Query(); $q->query( array( 'post_type' => 'movies', 'distribution' => 'companyA', 'meta_key' => 'year', 'orderby' => 'meta_value_num title', 'order' => 'ASC', 'posts_per_page' => -1, 'post_status' => 'publish', )); var_dump($q->request); 

Ваша проблема не столько с order сколько с order . Хотя orderby принимает несколько значений, и ваше использование выглядит нормально, order принимает только ASC или DESC .

После order как order обработки order добавляется к выходу обработки order . Если я правильно понимаю логику, то это означает, что из нескольких параметров order будет применяться последний, указанный в списке.

Попробуйте изменить order на 'title meta_value_num' поэтому заголовок сортируется по умолчанию, и order применяется к году вместо заголовка.