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

В WordPress сортировка записей по нескольким параметрам может быть осуществлена с помощью функции pre_get_posts. Для этого потребуется изменить основной запрос, используемый для получения записей на странице.

Шаг 1: Создайте дочернюю тему

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

Шаг 2: Создайте функцию для сортировки записей

В файле functions.php вашей дочерней темы создайте функцию, которая будет осуществлять сортировку записей по нужным параметрам. Ниже приведен пример функции, которая сортирует записи в порядке возрастания даты публикации и вторично сортирует их по заголовку:

function custom_post_order($query) {
    if ( !is_admin() && $query->is_main_query() ) {
        if ( is_archive() || is_category() || is_tag() ) {
            $query->set( 'orderby', array( 'date' => 'ASC', 'title' => 'ASC' ) );
        }
    }
}
add_action( 'pre_get_posts', 'custom_post_order' );

Шаг 3: Обновите параметры сортировки

В примере выше используется сортировка по дате публикации в порядке возрастания и вторичная сортировка по заголовку в порядке возрастания. Вы можете изменить эти параметры в соответствии с вашими потребностями. Для сортировки записей по убыванию вы можете использовать 'DESC' вместо 'ASC'.

Шаг 4: Сохраните и проверьте изменения

Сохраните файл functions.php в вашей дочерней теме и проверьте, как работает сортировка в вашем WordPress сайте. Записи должны быть отсортированы в соответствии с указанными параметрами.

Нельзя не отметить, что этот метод работает для архивных страниц, таких как архивы постов или категории. Если вам нужно осуществить сортировку записей на других типах страниц, вам потребуется отредактировать условие в функции custom_post_order в соответствии с вашими требованиями.

Теперь вы знаете, как сделать сортировку записей по нескольким параметрам в WordPress с помощью функции pre_get_posts.