Сортировка записей по дате (по убыванию) и заголовку (по возрастанию)
В настоящее время записи на моем сайте отсортированы по алфавиту по заголовку:
/* Сортировка записей по алфавиту */
function prefix_modify_query_order( $query ) {
if ( is_main_query() ) {
$query->set( 'orderby', 'title' );
$query->set( 'order', 'ASC' );
}
}
add_action( 'pre_get_posts', 'prefix_modify_query_order' );
Теперь я хочу отсортировать записи по алфавиту по заголовку (по возрастанию), но также и по дате (по убыванию).
Вот пример того, что нужно получить:
- AUDI A1 Ambition 1.4 (опубликовано 01/01/17)
- AUDI A1 Ambition 1.4 (опубликовано 01/01/16)
- AUDI A1 Ambition 1.4 (опубликовано 01/01/15)
- BMW 120i Active Flex 2.0 (опубликовано 01/01/17)
- BMW 120i Active Flex 2.0 (опубликовано 01/01/16)
- BMW 120i Active Flex 2.0 (опубликовано 01/01/15)
- Citroen...
Изменение параметра orderby
на $query->set( 'orderby', 'date title' );
не решает мою проблему, так как мне нужно показывать самые свежие записи первыми.
Буду благодарен за любые другие идеи.
Вы можете передать массив в параметр query
, как показано в следующем примере из Кодекса:
$args = array(
'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC' )
);
$query = new WP_Query( $args );
В вашем случае это будет выглядеть примерно так:
/* Сортировка записей по алфавиту */
function prefix_modify_query_order( $query ) {
if ( is_main_query() ) {
$args = array( 'post_date' => 'DESC', 'title' => 'ASC' );
$query->set( 'orderby', $args );
}
}
add_action( 'pre_get_posts', 'prefix_modify_query_order' );
Если вы хотите, чтобы post_date
был основным критерием фильтрации, вам нужно изменить его позицию в массиве. В текущем коде записи сначала сортируются по дате (новые сверху), а затем по алфавиту.

Я улучшил код, посмотрите, теперь он работает для вас

Да, приятель, я как раз собирался написать ответ, что добавил post_date первым в твой код, и это сработало, но ты изменил свой ответ раньше. Да, это сработало. Большое спасибо!
