Поддержка Проблемы и решения Сортировка содержимого категорий по алфавиту

  • Добрый день!

    Я изрыл весь интернет в поиске возможных, готовых вариантов решения моей проблемы, но безуспешно. Мне необходимо поправить шаблон loop-category.php таким образом, чтобы найденные посты выводились в алфавитном порядке, а не по дате создания, как это сделано по умолчанию.

    Если я правильно понял, то поправить нужно где-то в этом месте:

    <?php
    	/* Start the Loop.
    	 *
    	 * In Twenty Ten we use the same loop in multiple contexts.
    	 * It is broken into three main parts: when we're displaying
    	 * posts that are in the gallery category, when we're displaying
    	 * posts in the asides category, and finally all other posts.
    	 *
    	 * Additionally, we sometimes check for whether we are on an
    	 * archive page, a search page, etc., allowing for small differences
    	 * in the loop on each template without actually duplicating
    	 * the rest of the loop that is shared.
    	 *
    	 * Without further ado, the loop:
    	 */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

    Все что пока мне понятно, это то, что мне необходимо применить параметр orderby=title, но как и где это сделать?

    Спасибо!

Просмотр 15 ответов — с 1 по 15 (всего 17)
  • но как и где это сделать?

    Нужно переделать цикл. Можно аналогично этому.
    Но если циклов больше одного — лучше не использовать query_posts.

    Вариант по первой ссылке пробовал:

    <?php query_posts($query_string .'&cat=-1'); while ( have_posts() ) : the_post(); ?>

    Выводит только title поста и все. Вообще все идет на перекосяк, когда я пытаюсь использовать query_posts, в любой вариации.

    Так пост выглядит в нормальном состоянии

    Так выглядит после вставки query_posts

    Так что нужно использовать в моем случае?

    &cat=-1

    Это исключение категории с ID=1.
    Я считал, что уж коль Вы знаете про orderby=title, то документацию к функции уже читали или прочтёте, а не будете тупо копировать код, предназначенный не для того 🙂

    Так что нужно использовать в моем случае?

    Вместо &cat=-1 прописать orderby=title 🙂

    Я считал, что уж коль Вы знаете про orderby=title, то документацию к функции уже читали или прочтёте, а не будете тупо копировать код, предназначенный не для того 🙂

    Не совсем так. Моих знаний php явно не достаточно чтобы самостоятельно например создать шаблон страницы.

    Если быть конкретнее, то вот это выражение:
    <?php query_posts($query_string .'&orderby=title'); if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    Делает вывод страницы категории с постами — полностью не работоспособной. Экспериментально я выяснил, что пустую страницу получаю когда втыкаю в выражение условие if ( have_posts() )

    Когда я использую запрос query_posts, то он полностью замещает собой старый цикл, то есть я получаю то что видно на этом скриншоте.

    Разумеется, я не могу требовать дать мне готовый ответ, но моих знаний недостаточно чтобы понять какую функцию мне использовать и каким образом переписать обвязку внутри цикла. Поэтому если можно, то хотя бы поясните, почему query_posts полностью заменяет собой старый цикл, как этого избежать, и почему когда я добавляю в выражение if ( have_posts() ) — получаю пустую страницу?

    Может быть в шаблонах моей темы нужен другой подход?

    почему query_posts полностью заменяет собой старый цикл,

    🙂 А я ведь Вам в первом же ответе дал ссылку на оч. хорошие обьяснялки.

    Может быть в шаблонах моей темы нужен другой подход?

    Какую тему используете? (ссылку плз).

    🙂 А я ведь Вам в первом же ответе дал ссылку на оч. хорошие обьяснялки.

    Ну, я понял только одно, что query_posts заменяет полностью весь цикл, соответственно отменяется все что описано дальше в теле собственно while ( have_posts() ) : the_post(); , это я более-менее понял, но по существу ничего не дает.

    Какую тему используете? (ссылку плз).

    Вот эта

    Ну, я понял только одно, что query_posts заменяет полностью весь цикл, соответственно отменяется все что описано дальше в теле собственно while ( have_posts() ) : the_post(); , это я более-менее понял, но по существу ничего не дает.

    Поняли правильно и не правильно одновременно 🙂 Грубо говоря query_posts управляет циклом, определяет ЧТО и КАК выводить в цикле.

    См http://codex.wordpress.org/%D0%A6%D0%B8%D0%BA%D0%BB_WordPress

    Использовать несколько query_posts не рекомендуется, но если очень надо, то не забывать про wp_reset_query

    Вот эта

    Эм.. Тут в навигации используется wp_query.
    Я не уверен на 100%, но не исключаю что из-за этого всё ломается. Т.е. ломаете не из-за wp_query, а из-за использования query_posts вместе с этим.
    Думаю, в Вашем случае лучше использовать не query_posts, а wp_query.

    В файле loop.php перед 56-й строкой переопределить цикл.

    См http://wpmag.ru/2013/wp_query/

    Мб кто-то из более опытных коллег подскажет как лучше поступить и прав ли я в своих объяснялках 😉

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

    <?php $query = new wp_query( 'category_name=download&order=asc&orderby=title' ); while ( $query->have_posts() ) : $query->the_post(); ?>

    Но теперь вопрос, как мне адаптировать вышеуказанную строчку к выражению

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

    ?

    Откуда ему брать переменную с категорией, которую я указал здесь вручную: category_name=download ? И откуда он ее вообще берет в примере шаблона по умолчанию?

    Модератор Yuri

    (@yube)

    И откуда он ее вообще берет в примере шаблона по умолчанию?

    К тому моменту, когда дело доходит до шаблона, список постов, подлежащих выводу, уже сформирован движком. Шаблон только выводит этот список в Цикле. К сведению: один пост — тоже список. И даже пустой список — тоже, хоть это и вырожденный случай.

    Рекомендую к прочтению http://wpmag.ru/2014/query_posts-wordpress/

    Юрий я читал это уже.

    Модератор Yuri

    (@yube)

    Если читали, то почему не делаете с использованием pre_get_posts?

    Не понял сразу, слишком много информации одновременно приходится усваивать.

    А строчка add_action( 'pre_get_posts', 'my_pre_get_posts' ); делает хук полностью на всю функцию? То есть я изменю порядок обработки на все запросы wp_query ?

    Модератор Yuri

    (@yube)

    Ок, если я создам функцию my_pre_get_posts, то как мне задействовать ее в шаблоне?

    В шаблоне никак не нужно ее задействовать. Фильтр на pre_get_posts изменит стартовую выбору постов. Шаблону останется только эту выборку вывести, точно так же, как он выводит неизмененную выборку.

    В шаблоне никак не нужно ее задействовать. Фильтр на pre_get_posts изменит стартовую выбору постов. Шаблону останется только эту выборку вывести, точно так же, как он выводит неизмененную выборку.

    Понял, а есть вариант выборочной правки запроса? Мне не нужно исправлять порядок сортировки для всех категорий.

    Медленно но начинаю доходить, наверное нужно попробовать in_category

    Модератор Yuri

    (@yube)

    наверное нужно попробовать in_category

    Тогда уже is_category. Вам же категорию надо проверить на id/name, а не пост на принадлежность категории.

Просмотр 15 ответов — с 1 по 15 (всего 17)
  • Тема «Сортировка содержимого категорий по алфавиту» закрыта для новых ответов.