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

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

Изменение порядка публикаций по дате: ASC и DESC

По умолчанию WordPress выводит записи с сортировкой по дате публикации в порядке убывания (DESC), то есть самые свежие записи отображаются первыми. Чтобы изменить порядок на возрастание (ASC), можно использовать параметр order в запросах WP_Query.

Вот простой пример, как вывести записи в обратном порядке (от самой старой к новой):

$args = [
    'post_type' => 'post',
    'orderby'   => 'date',
    'order'     => 'ASC',
    'posts_per_page' => 10
];
$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        // Выводим заголовок
        the_title('<h2>', '</h2>');
    }
    wp_reset_postdata();
}

Если вы хотите изменить порядок вывода в главном цикле (например, на главной странице блога), то можно использовать хук pre_get_posts и изменить параметры запроса, не создавая новый объект WP_Query.

function wptests_change_main_query_order(\WP_Query $query) {
    if (is_admin() || !$query->is_main_query()) {
        return;
    }
    if (is_home()) { // Главная страница блога
        $query->set('orderby', 'date');
        $query->set('order', 'ASC');
    }
}
add_action('pre_get_posts', 'wptests_change_main_query_order');

Сортировка публикаций по пользовательским полям (meta_query)

Часто нужно вывести публикации, отсортированные по значениям произвольных полей (custom fields). Например, у вас есть поле event_date, в котором хранится дата события, и вы хотите вывести события в хронологическом порядке.

Для этого используется параметр meta_key и orderby со значением meta_value (или meta_value_num для чисел).

$args = [
    'post_type' => 'event',
    'meta_key'  => 'event_date',
    'orderby'   => 'meta_value',
    'order'     => 'ASC',
    'posts_per_page' => 10
];
$query = new WP_Query($args);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        the_title('<h2>', '</h2>');
        echo '<p>Дата события: ' . get_post_meta(get_the_ID(), 'event_date', true) . '</p>';
    }
    wp_reset_postdata();
}

Важно, чтобы формат данных в пользовательском поле был подходящим для сортировки. Для дат лучше использовать формат YYYYMMDD или UNIX timestamp.

Сортировка по нескольким пользовательским полям

Если нужно сортировать по нескольким метаполям, начиная с WordPress 4.2 поддерживается массив orderby. Пример:

$args = [
    'post_type' => 'event',
    'meta_query' => [
        'relation' => 'AND',
        'start_date_clause' => [
            'key' => 'start_date',
            'type' => 'DATE'
        ],
        'end_date_clause' => [
            'key' => 'end_date',
            'type' => 'DATE'
        ]
    ],
    'orderby' => [
        'start_date_clause' => 'ASC',
        'end_date_clause' => 'DESC'
    ],
    'posts_per_page' => 10
];
$query = new WP_Query($args);

Это позволит сортировать сначала по дате начала события, а при равенстве — по дате окончания.

Сортировка по таксономиям и произвольным критериям

WordPress не поддерживает стандартную сортировку по таксономиям (например, по категориям или тегам) напрямую через WP_Query, но можно обойти это с помощью JOIN в SQL или использовать плагины.

Для простых случаев, когда нужно вывести публикации из определенной категории, сортировка остается по дате, но можно вручную реализовать сортировку по названию категории:

function wptests_sort_posts_by_category_name($query) {
    if (is_admin() || !$query->is_main_query()) {
        return;
    }
    if (is_home()) {
        $query->set('orderby', 'title');
        $query->set('order', 'ASC');
    }
}
add_action('pre_get_posts', 'wptests_sort_posts_by_category_name');

Если же нужно сортировать по произвольным критериям, например, по пользовательскому рейтингу, можно использовать плагин Clearfy Pro, который расширяет возможности сортировки и оптимизации запросов.

Создание собственного параметра сортировки через фильтр posts_orderby

Если стандартных возможностей WP_Query не хватает, можно подключиться к фильтру posts_orderby для тонкой настройки SQL-запроса.

function wptests_custom_orderby( $orderby, \WP_Query $query ) {
    if ( $query->is_main_query() && is_home() && $query->get('orderby_custom') ) {
        global $wpdb;
        // Пример сортировки по длине заголовка
        return 'LENGTH(' . $wpdb->posts . '.post_title) ASC';
    }
    return $orderby;
}
add_filter('posts_orderby', 'wptests_custom_orderby', 10, 2);

Для активации примера нужно добавить параметр orderby_custom в запрос.

Практические рекомендации и советы

  • Всегда тестируйте сортировку на больших объемах данных, чтобы не получить чрезмерно тяжелые запросы.
  • Используйте индексы в базе данных для метаполей, которые часто участвуют в сортировках.
  • Если нужно часто сортировать по сложным критериям, рассмотрите возможность создания отдельной таблицы или кэширования результатов.
  • Для задач с сортировкой по нескольким параметрам изучите возможности WP_Query с массивом orderby и meta_query.
  • Плагины вроде Clearfy Pro помогут упростить и улучшить производительность.

Пример: изменение порядка вывода на главной с помощью Clearfy Pro

В Clearfy Pro есть модуль, который позволяет легко менять порядок публикаций без кода. После установки и активации:

  1. Перейдите в раздел Clearfy Pro > Оптимизация.
  2. Включите модуль "Изменение параметров запроса".
  3. Настройте сортировку по нужным полям, например, по пользовательскому метаполю или дате.

Это хороший вариант для тех, кто не хочет писать код, но нуждается в гибкой сортировке.

Как добавить и использовать атрибуты шорткодов в WordPress с примерами
23.02.2026
Удаление и изменение авторских публикаций WordPress программно
10.02.2026
Как изменить порядок вывода публикаций в WordPress по датам и пользовательским критериям
10.03.2026
Как использовать AJAX в WordPress для обновления контекста без перезагрузки страницы
17.12.2025
Как создать собственный тип записи (custom post type) в WordPress
25.11.2025