Как изменить сортировку записей в WordPress?

Мы отсортируем записи в WordPress в публичной части для определенной таксономии. На базе этого примера вы сможете легко построить свою собственную логику сортировки.


Ниже приведен код, который нужно вставить в

functions.php

вашей темы:

function change_order_post_list( $query ){

  if( !is_admin() && $query->is_main_query() && $query->query['taxonomy'] == 'status' ) {

    $query->set('meta_key'  , 'date_actual');
    $query->set('orderby'   , 'meta_value');
    $query->set('order'     , 'DESC');

  }
}
add_action('pre_get_posts', 'change_order_post_list', 1 );

Немного подробностей.

Функция будет срабатывать перед тем, как движок полезет в базу данных за записями. Нам остается просто переопределить значения по-умолчанию.

В условии мы проверяем:

  • Находимся ли мы в административном разделе (в

    /wp-admin

    );
  • Запрос является «главным». Например, если мы получаем записи через

    get_posts()

    в шаблоне — это не главный запрос. Главным будет страница, на которой мы это делаем;
  • Запрос вытаскивает посты из нашей собственной таксономии

    status

    ;

Если все условия сработали, мы сортируем по значению произвольного поля

date_actual

в порядке убывания.

Если принцип работы понятен, то вы сможете легко добавить свою логику в этот пример.


EnglishRussianUkrainian