Wordpress - сортировка постов по дате

102
12 мая 2021, 04:50

Объясните, пожалуйста, как сделать сортировку постов для определенной категории по дате по возрастанию. То есть нужно добиться, чтобы пост опубликованный последним выводился последним, а не первым. Повторюсь, что это нужно сделать только для одной категории. Сейчас используется стандартный цикл вывода постов.

<?php if( have_posts() ){ while( have_posts() ){ the_post(); ?>
    <div <?php post_class(); ?> id="post-<?php the_ID(); ?>">
        <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
        <?php the_content(); ?>
    </div>
    <?php } /* конец while */ ?>
    <div class="navigation">
        <div class="next-posts"><?php next_posts_link(); ?></div>
        <div class="prev-posts"><?php previous_posts_link(); ?></div>
    </div>
<?php
} // конец if
else 
    echo "<h2>Записей нет.</h2>";

То есть сейчас пост опубликованный последним, отображается первым. Заранее спасибо за помощь.

Answer 1

Для этого вам понадобится внести дополнительные параметры в основную выборку постов для данной категории. Это делается с помощью хуков.

В данном случае примерно так:

// Регистрируем хук и передаем название функции, 
// которая будет вносить изменения в выборку
add_action( 'pre_get_posts', 'sort_my_category_by_date' );
// Пишем саму функцию, которая внедрит нужную сортировку
function sort_my_category_by_date( $query ) {
    // Убеждаемся, что изменения не касаются админки
    // и что мы применяем сортировку именно к основной выборке постов 
    // (а не к виджетам, например)
    if ( ! is_admin() && $query->is_main_query() ) {
        // Изменяем сортировку только в пределах страницы определенной категории
        if ( is_category( $category_id ) ) {
            // Сортировать по полю "Дата"
            $query->set( 'orderby', 'date' );
            // Сортировать по возрастанию
            $query->set( 'order', 'ASC' );
        }
    }
}

Это примерный код (без тестирования). Его можно поместить в functions.php или прямо в тело шаблона вашей категории, лучше где-нибудь в начале файла, до get_header(). Не забудьте заменить $category_id на ID (или ярлык) нужной вам категории.

  • Подробнее о хуке pre_get_posts — здесь.
  • Подробнее о функции is_category() здесь.
  • Подробнее о параметрах выборки (order, orderby и прочем) в документации.

Инфа для понимания сути, кратко:

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

Полный список хуков WordPress / СlassicPress есть в документации и тут, например. В вашем случае подходит хук pre_get_posts (дословно «перед выборкой постов»), который и предназначен для изменения параметров выборки.

В WordPress/СlassicPress есть два типа хуков. Один для обработки «событий», другой для для переопределения переменных. Первые подключаются функцией add_action(), вторые — функцией add_filter(). В данном случае мы внедряемся в событие pre_get_posts, поэтому используем add_action(). Когда событие срабатывает, хук вызывает нашу функцию сортировки.

READ ALSO
Не понимаю как создать скрипт начисления процентов?

Не понимаю как создать скрипт начисления процентов?

Ребята помогите, пожалуйстаЯ совсем не понимаю как мне это сделать

100
Slim. Не могу запустить &ldquo;Hello World&rdquo;

Slim. Не могу запустить “Hello World”

Хочу изучить Slim v4 для RESTFull сервера

94
Изменить формат вывода по regex

Изменить формат вывода по regex

Всем привет, еще только изучаю язык, строго не судите такой вопрос: все номера телефонов в тексте записанные в формате +375XXYYYYYYY с помощью regex заменить...

74
корректная работа значков BottomNavigation

корректная работа значков BottomNavigation

при создании активити происходит выбор какой фрагмент отобразить на основе Extras в intent, и при выборе не первого фрагмента, а второго или третьего...

114