Сортировка записей по дате (по убыванию) и заголовку (по возрастанию)

3 июл. 2017 г., 01:48:30
Просмотры: 40.4K
Голосов: 6

В настоящее время записи на моем сайте отсортированы по алфавиту по заголовку:

/* Сортировка записей по алфавиту */
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' ); не решает мою проблему, так как мне нужно показывать самые свежие записи первыми.

Буду благодарен за любые другие идеи.

0
Все ответы на вопрос 1
3
10

Вы можете передать массив в параметр 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 был основным критерием фильтрации, вам нужно изменить его позицию в массиве. В текущем коде записи сначала сортируются по дате (новые сверху), а затем по алфавиту.

3 июл. 2017 г. 02:06:25
Комментарии

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

Cesar Henrique Damascena Cesar Henrique Damascena
3 июл. 2017 г. 02:52:05

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

drabello drabello
3 июл. 2017 г. 02:57:36

Я рад, что это сработало для вас :D, если можете, пожалуйста, отметьте как правильный ответ или опубликуйте свой ответ, это поможет другим людям с таким же вопросом, спасибо!

Cesar Henrique Damascena Cesar Henrique Damascena
3 июл. 2017 г. 03:02:34