я пытаюсь выполнить пользовательский запрос типа записи, чтобы соответствовать следующим критериям:
сортировать фильмы сначала по годам в порядке убывания, а
затем («внутри» порядка года) по названию в алфавитном порядке.
желаемый результат:
название фильма 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?
спасибо заранее!
Вот результирующий SQL-запрос от $GLOBALS['wp_query']->request
ВЫБОР wp_posts. *
ОТ wp_posts
INNER JOIN wp_term_relationships
ВКЛ (wp_posts.id = wp_term_relationships.object_id)
INNER JOIN wp_postmeta
ВКЛ (wp_posts.id = wp_postmeta.post_id)
где 1 = 1
и (wp_term_relationships.term_taxonomy_id в (24))
и wp_posts.post_type = 'movies'
AND (wp_posts.post_status = 'publish')
AND (wp_postmeta.meta_key = 'year')
GROUP BY wp_posts.id
ORDER BY wp_postmeta.meta_value + 0,
wp_posts.post_title DESC
источник
ASC
следует короткое замыкание;DESC
должен сортировать ЗА.Ваша проблема не столько с,
orderby
сколько сorder
. В то время какorderby
принимает несколько значений и ваше использование выглядит нормально,order
только принимаетASC
илиDESC
.После санации
order
добавляется к выводуorderby
обработки. Если я правильно понимаю логику, это означает, что из несколькихorderby
параметровorder
будет применяться последний из перечисленных.Попробуйте изменить
orderby
на'title meta_value_num'
так, чтобы заголовок сортировался по умолчанию иorder
применялся к году вместо заголовка.источник
order =>
параметр в форме запроса ASC на DESC и обратно. поэтому я думаю, что meta_value_num не применяется. так что ваш интересный вопрос о логике взаимодействия ORDER и ORDERBY, может быть, как-то отличается? или я делаю это неправильно?