vasiliy Автор  дек 29, 2016

Правильная сортировка статей в WordPress

Всем привет! Сегодня мы обсудим сортировку статей в WordPress по алфавиту – как не наступить на подводный камень, дописывая дополнительный код в шаблоне WordPress. Это довольно интересная тема, я практически целый день потратил на решение одного-единственного нюанса, которого – читайте дальше.

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

Не совсем правильная сортировка статей в WordPress, как исправить

Самый простой способ сортировки статей в WordPress – внести дополнительную запись в файл настроек шаблона functions.php. Вносить нужно следующее:

function wpsf_orderby($query) {

    if ( is_category() ) {

        remove_action( 'pre_get_posts', __FUNCTION__ );

        add_filter( 'posts_orderby', function() { return ' post_title ASC'; } );

    }

}

add_action( 'pre_get_posts', 'wpsf_orderby' );

Эта запись поможет движку отсортировать статьи во всех категориях по алфавиту в нарастающем порядке (от А до Я). Об этом свидетельствует запись в 4-й строке: post_title ASC.

Если же Вы хотите изменить порядок сортировки в какой-то одной выбранной категории, то просто изменим код, представленный выше, добавив во 2-й строке название или id категории:

if ( is_category('category_name') ) {

сортировка статей в WordPress

В чем же нюанс?

А нюанс заключается в том, что если вы используете виджет последних записей, то появится проблема. Это изменение в файле functions.php распространяется на абсолютно все категории в во всем движке (если Вы, конечно, не указывали одной конкретной категории, а поменяли порядок сортировки во всех категориях сразу). То есть в виджете «Последние записи», когда Вы находитесь на странице категории, теперь отображаются не последние по дате публикации, а первые по алфавиту, как и все статьи в основном поле сайта. Что означает только одно: теперь виджет абсолютно не выполняет своей функции, а показывает просто несколько первых статей по алфавиту...

Как это исправить? Первым делом идем в файл functions.php и возвращаем там все как было. А теперь ищем файл, который отвечает за вывод категорий. В разных шаблонах он свой, у меня последний раз за вывод категории соответствовал файл archive.php, то есть шаблон не особо закрученный, все достаточно просто. Ищем в этом файле вывод цикла статей. Примерно вот такая запись:

<? php if ( have_posts () ) : while (have_posts()):the_post(); ?>

Тут же можем его удалять, а вместо него ставить следующую запись:

<? query_posts($query_string.'&orderby=title&order=asc');

if (have_posts()) : while (have_posts()) : the_post(); ?>

Что мы сделали в данном случае? Мы объявили смену сортировки статей непосредственно перед выводом их в блок с контентом, а не глобально для всего сайта, как в предыдущем примере. Хотя, если Вы не пользуетесь виджетом «Последние записи», то Вам вполне подойдет и первый вариант, он даже немного легче, как для меня.

Похожие материалы (по тегу)

Добавить комментарий


Защитный код
Обновить

Top