Главная Часть 1. Создание блога Глава 8. Техническая часть Урок 150. Правильная сортировка WordPress постов

Урок 150. Правильная сортировка WordPress постов

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

Приветствую вас, дорогие читатели, в нашем очередном уроке!

Сегодня речь пойдет о сортировке WordPress. Вы знали, что можно управлять сортировкой постов, выводить их, к примеру, задом наперед (от старых постов, к новым), выводить посты по популярности (количеству комментариев), да и еще по массе других параметров? Так вот, оказывается, можно! При чем никакие плагины не нужны, все это регулируется небольшими изменениями в коде!

Все вышесказанное становится возможным благодаря функции query_posts. Я решил углубиться в код wordpress, поэтому в скором времени будут выходить уроки по тем или иным функциям. А их довольно много, и все они очень интересны.

Кстати, всякие плагины вывода популярных статей реализованы также благодаря этой функции.

Единственное ограничение - использовать функцию можно только 1 раз на странице. Не более!

Если Вы новичок, и хотите примерно знать, как вообще выводятся посты, и как что работает, то Вам я посвящу следующие 2 абзаца. Если же Вы и так знаете, как и что функционирует, пропустите их.

Итак, статьи выводятся благодаря циклу. Цикл - это действие, которое будет происходить до тех пор, пока не будет выполнено условие. В WordPress это работает так: цикл будет брать статью, выводить ее, затем брать другую, выводить и ее, и так далее, до тех пор, пока не выведет все статьи. Собственно, вот и условие - цикл работает, пока есть статьи. Когда они заканчиваются - он завершает свою работу.

Как это относится к функции query_posts? Все очень просто, данную функцию необходимо использовать там, где работает цикл. Цикл узнать легко, он называется while. Вообще циклов несколько видов бывает, но именно в WordPress самый распространенный - цикл While.

Сортировка WordPress постов по дате

Находим нужный файл шаблона, исходя из того, какую страницу Вы хотите отфильтровать. (Если главную - то index.php, если сайдбар - то sidebar.php. Подробнее про состав темы читайте здесь).

Теперь находим начало цикла, точнее, даже, начало условия, при котором цикл будет работать. Еще одна заметка для новичков:

Прежде чем цикл будет работать, проверяется, есть ли вообще статьи? Проверку выполняет функция if. Выглядит в коде это так: if ( have_posts() )

Сразу же перед этой проверкой вставьте следующий код:

Поясню:

  и ?> - это теги php. Они просто показывают, что между ними содержится php-код. Это аналог .

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

Что делает эта конструкция? Она выводит посты задом-наперед. Теперь на главной (если Вы ее выбрали, в качестве пациента) отображаются посты самые первые, которые Вы написали еще когда создали блог. И последняя страница, соответственно - Ваши последние статьи.

сортировка WordPress

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

Вернемся к нашей конструкции. query_posts - это функция, которая принимает параметры. В нашем случае параметром служил order. Order - это направление сортировки. Он может принять 2 значения:

ASC - от меньшего к большему.

DESC - от большего к меньшему.

У каждой статьи есть свой порядковый номер, что логично. Отсюда и следует, что при ASC отображаются от 1 статьи к последней. По-умолчанию же работает DESC. Который наоборот отображает последние статьи в начале.

Данная конструкция работает не только с порядковым номером статей, но и вообще с любыми вещами. Такими как: дата публикации статьи, сортировка по алфавиту, сортировка по авторам. В нашем случае, по-умолчанию сортировалось по ID так как мы не указывали никакого другого параметра. В следующем примере укажем!

Сортировка WordPress постов по количеству комментариев

Для этого вставим туда же, перед условием if (have_posts()), следующую строку:

Разберемся. orderby - это в дословном переводе "сортировка по". Мы выбрали сортировку по: comments_count. То, есть, по количеству комментариев. Order DESC - это от большего к меньшему. То есть, теперь на главной будут отображаться статьи с наибольшем количеством комментариев, и будут идти на спад от страницы к странице. Если мы пропишем: order ASC. Тогда будет все с точностью, да наоборот. На главной будут статьи с наименьшим количеством комментариев.

Уверен, что по двум примерам Вы все поняли, поэтому приведу небольшую таблицу параметров, которые может принимать функция orderby.

  1. ID - сортируем по порядковому номеру статей.
  2. author - сортируем по ID авторов. Так, как указано в базе данных.
  3. title - сортировка wordpress по заголовку
  4. date - сортировка wordpress по дате публикации.
  5. modified - сортировка wordpress по дате изменения.
  6. rand - случайный порядок. В данном случае при каждом обновлении страницы будут вылезать разные посты.
  7. comment_count - сортировка по количеству комментариев.
  8. meta_value_num - сортировка по произвольным полям значения которых являются числами. Достаточно создать для статьи произвольное поле, кстати о них мы еще поговорим в следующих статьях, и вписать нужное число.

На самом деле там еще море всяких вариантов сортировки, но эти - наиболее важные.

Давайте для закрепления выведем ограниченное количество рандомных постов. Например, выведем всего 4 поста рандомных на главной.

Рандомная сортировка WordPress

Для этого вставьте перед началом условия цикла вот такой код:

С orderby Вы уже знакомы, а вот posts_per_page еще не знаете. Опять же, в переводе на русский это означает: "Постов на страницу". В нашем случае 4 поста на страницу. В данном случае order ASC\DESC не указывается, так как сортировка рандомная, и если мы поставим order ASC, например, то его проигнорирует сервер. Так как не понятно, что именно надо отображать от меньшего к большему.

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

сортировка WordPress

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

На этом у меня все, до скорых встреч!

Полезные статьи Вам на почту!

Нас более 700 человек!

Комментарии

Вера
-1

Не совсем понятно. А как в сайдбаре, куда выводятся последние посты, закрепить несколько определённых таким образом, чтобы самые последние в этом списке не выводились, ежели мне этого не хочется???
Спасибо!

13.06.2014
Sly
-2

Так Вы можете поступить намного проще. Достаточно в нужных постах выставить произвольные поля, например, в первом посте в произвольном поле написать 1, во втором - 2. И так далее. А затем сделать вывод по произвольным полям с помощью meta_value_num.

Другой способ - сделать рубрику, ее можно скрыть, туда добавить нужные посты, и затем в сайдбаре вывести только посты из этой рубрики.

Третий способ - создать еще одного автора на блоге, и нужные посты писать от его имени. Затем вывести в сайдбаре посты от определенного автора, с помощью author.

Способов масса на самом деле. Просто учитывайте, что вот есть конструкция:
query_posts( array ( 'orderby' => 'comment_count', 'order' => 'DESC' ) );

И вставляйте нужные значения вместо comments_count и способ сортировки.

Вот Вам готовая строка для вывода записей по числам в произвольных полях, от меньшего к большему:
query_posts( array ( 'orderby' => 'meta_value_num', 'order' => 'ASC' ) );

Будут вопросы - пишите 🙂

13.06.2014
Вера
0

Спасибки!

13.06.2014
Sly
-1

Совсем забыл сказать, про при сортировке по произвольному полю, надо еще указать meta_value_num.

Значит делать это так:
Редактируете любую запись\записи, даете им произвольное поле со своим названием, например, age. В значении указываете любое число, какое хотите. Смотря где статья должна располагаться, каким номером.

Теперь прописываете такую строчку:
query_posts( array ( 'meta_key'=>'age', 'orderby' => 'meta_value_num', 'order' => 'ASC' ) );

Вот и все! В meta_key указываете то название, которое дали произвольному полю. Повторюсь, в моем случае оно было age. Сортировка от меньшего к большему, т.е. 1-2-3-4. Соответственно, при таком числовом обозначении под номером 3 будет располагаться та статья, у которой в значении произвольного поля стоит 3 . Надеюсь все понятно 🙂

13.06.2014
Наталья
-1

Чем больше читаю, тем больше понимаю, что ничего не знаю... Мне не нужно выводить статьи шиворот- навыворот, но вот узнать подробнее про значение тегов и надписей интересно, что бы понимать, что же все - таки написано.

20.06.2014
Sly
-2

Иногда полезно просто прочитать. Никогда не знаешь, где найдешь что-то полезное для себя 🙂

01.07.2014
Тарас
-1

Ещё раз убеждаюсь, что знание HTML'a всё же необходима для лучшего администрирования сайта, да и плагины друг друга частенько переписывают или мешают работать сайту нормально.

30.06.2014
Sly
0

Согласен. Html + css очень важны для хорошего управления сайтом. Базовый php нужен для изменения внутренних настроек. Можно обойтись без всего этого: но слишком сложно, ведь даже ничего не можешь поменять.

01.07.2014
Княгиня
0

А если на странице нужно несколько циклов с разными сортировками, то в ход идёт wp_query. Правда, с ходу всех деталей не вспомню: я много ковыряла собственный блог, добавляя то и это, но наизусть не помню, пользуюсь справочниками. Они хорошо помогают, если знаешь, что искать.

05.07.2014
Sly
0

Согласен. Документация очень часто выручает.

05.07.2014
Иван
0

Если на странице несколько циклов, то лучше всего использовать get_posts().

27.09.2015
Данлик
0

Здрасте, а как сделать сортировку по популярности за определенное количество дней? Ну чтоб на главной выводились самые популярные за неделю или день, желательно чтоб это значение можно было менять прямо с главной.

25.10.2014
Sly
0

Это Вам плагин надо искать. К счастью, сейчас таких много.

09.12.2014
artem
-1

Скажите как сортировать страницы на главной, чтобы вместо "следущая запись " выводились 1 2 3 4.... 34 ну и так далее.

23.11.2014
Sly
-1

wp-pagenavi плагин

08.12.2014
Алекс
-1

А как сортировать записи в полтфолио, что должно быть вместо "order"?

02.08.2016
1

Сортировать записи по какому ключу?

09.08.2016
Александр
0

подскажите пожалуйста что я делаю не так, мне надо сортировка в рубрике по числу в доп поле, может я просто не правильно понял
есть строка

перед ней я вписываю эту строку
'название-поля', 'orderby' => 'meta_value_num', 'order' => 'DESC' ) );?>
и мне выкидывает на страницу все записи, хотя мне надо записи той рубрики в которой я нахожусь но уже отсортированные по значению находящемуся поле.

09.11.2016
ekaterina
0

Добрый день, спасибо за полезную и понятную статью, все работает. Я сделала сортировку по алфавиту: 'title', 'order' => 'ASC' ) ); ?> Но почему-то перестает работать постраничная навигация. Совсем. Как это можно поправить?

19.06.2017

Оставить комментарий

Поделиться