Динамическая сортировка постов

[ ←Вернуться к стандартному виду ]

Печатная версия

Сортировка постов в рубрике

Сортировка постов в рубрике

Перед началом цикла добавляем:

<?php
$order = "&orderby=date&order=DESC";
$s2 = ' selected="selected"';
if ($_POST['select'] == 'title') { $order = "&orderby=title&order=ASC"; $s1 = ' selected="selected"'; $s2 = ''; }
if ($_POST['select'] == 'newest') { $order = "&orderby=date&order=DESC"; $s2 = ' selected="selected"'; }
if ($_POST['select'] == 'oldest') { $order = "&orderby=date&order=ASC"; $s3 = ' selected="selected"'; $s2 = ''; }
?>

<form method="post" id="order">
Сортировать по:
<select name="select" onchange='this.form.submit()'>
<option value="title"<?=$s1?>>по заголовку</option>
<option value="newest"<?=$s2?>>по дате (сначала новые)</option>
<option value="oldest"<?=$s3?>>по дате (сначала старые)</option>
</select>
</form>
<?php query_posts($order); ?>

Добавим еще сортировку по дате последнего изменения поста, получаем:

<?php
$order = "&orderby=date&order=DESC";
$s2 = ' selected="selected"';
if ($_POST['select'] == 'title') { $order = "&orderby=title&order=ASC"; $s1 = ' selected="selected"'; $s2 = ''; }
if ($_POST['select'] == 'newest') { $order = "&orderby=date&order=DESC"; $s2 = ' selected="selected"'; }
if ($_POST['select'] == 'oldest') { $order = "&orderby=date&order=ASC"; $s3 = ' selected="selected"'; $s2 = ''; }
if ($_POST['select'] == 'modified') { $order = "&orderby=modified"; $s4 = ' selected="selected"'; $s3 = ''; }
?>

<form method="post" id="order">
Сортировать:
<select name="select" onchange='this.form.submit()' style="width:200px">
<option value="title"<?=$s1?>>по заголовку</option>
<option value="newest"<?=$s2?>>по дате (сначала новые)</option>
<option value="oldest"<?=$s3?>>по дате (сначала старые)</option>
<option value="modified"<?=$s4?>>по дате изменения</option>
</select>
</form>

<?php query_posts($order); ?>

Как видите, добавить или убрать фильтр сортировки довольно легко (про параметры query_posts).

Да, кстати, мопед не мой, взяла идею отсюда http://wordpress.org/support/topic/189864?replies=6#post-827607
UPD оказывается код из Темы Dimox'a «каталог статей»


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

  1. # Dimox (4) 23.11.2008 в 22:08

    Ха, прикольно. Это мой код, который был взят из моей темы "Каталог статей" =)

  2. # vanoc (1) 23.11.2008 в 22:51

    не знал куда скинуть. у тебя что-то с rss-кой - http://www.10pix.ru/img1/379817/4944.jpg

  3. # sonika (301) 23.11.2008 в 23:12

    Скачала, посмотрела, действительно он :) Интересно, как англоговорящий пользователь расковырял русскоязычную Тему? Русские-то и в китайском копнут если очень надо, а вот англоговорящие как-то не жалуют чужие языки и особенно кириллицу...

  4. # Dimox (4) 23.11.2008 в 23:21

    Все очень просто - тема, так же, как и плагин, есть и на английском языке =) Поэтому и на форуме текст в коде на английском.

  5. # mikolka (1) 24.11.2008 в 12:05

    полезный кусочек, спасибки.
    только не подумайте, что я спаммер =)
    П.с. фид поломался

  6. # Семен (1) 12.12.2008 в 03:57

    Что то сложновато ( Но попробую разобраться, просто я пока начинающий типа )
    Спасибо!

  7. # teatester 30.01.2009 в 21:45

    Извините, а этот код вписывать в index.php шаблона или куда?
    И это будет такая настройка в админке или просто на сайте в каждой категории пользователи смогут сами выбирать как сортировать?

  8. # sonika (301) 31.01.2009 в 17:39

    teatester, вписывать в тот шаблон Темы, где нужна сортировка постов.

  9. # Сергей 20.02.2009 в 17:34

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

  10. # sonika (301) 20.02.2009 в 19:36

    Сергей, так текущая только и участвует (имеет смысл этот код вставить в шаблон рубрики category.php)

  11. # Сергей 21.02.2009 в 12:59

    Спасиб, что-то, может, не так делаю, помещаю в файлик category-1.php, но выборочка делается по всем категориям.

    Указал отображение только текущей категории:

    Отображает текущую категорию, но сортировка не работает.
    А само смешное, что pagenavi сума сошел :-) — он видит все категории, но ничего не листается.

    Буду пробовать дальше.

  12. # Сергей 21.02.2009 в 13:01

    Там код не отобразился.
    Я через get_posts пытался выбирать категории.

  13. # sonika (301) 21.02.2009 в 13:20

    Сергей, попробуйте скрестить query_posts($order); и $categoryvariable=$cat; $query= 'cat=' . $categoryvariable. '&posts_per_page=-1'; query_posts($query);

  14. # Сергей 21.02.2009 в 14:24

    Соника, с вашим кодом выводятся нужные категории, но не сортирует.

    &orderby=title&order=ASC&cat=1
    Добавил вот такую штучку — работает и сортирует, но теперь при переходе на следующую страницу пейджнави все ломается.

  15. # Сергей 25.02.2009 в 17:33

    Сделал, хоть немного и не так, если кому интересно пишите на мыло

  16. # brainsolid (4) 07.03.2009 в 14:29

    При добавлении кода ломается pagenavi - есть идеи как пофиксить?

  17. # brainsolid 07.03.2009 в 14:30

    При использовании кода ломается pagenavi в категориях - есть идеи как пофиксить?

  18. # Сергей (2) 07.03.2009 в 15:33

    У меня тоже глючило.
    Сделал без выпадающего списка, а просто ссылками — заработало.

  19. # brainsolid (4) 07.03.2009 в 17:40

    А как сделать ссылками такую сортировку? Можешь показать готовый код?

  20. # Сергей (2) 07.03.2009 в 18:51

    по заголовку
    и так далее

  21. # Зайва Игорь Леонидович (2) 08.03.2009 в 06:51

    Классная штучка - очень удобно, спасибо... :) Вот такой нюанс: вместо "width:200px;" лучше "width:auto;", а то у меня она очень длинная получилась.
    П.С. У меня вроде пощелкал - пейджнави нормально работает... :) Еще бы "по комментариям" и "по просмотрам" и плагины никакие не нужны. ;)

  22. # brainsolid (4) 08.03.2009 в 17:19

    Сергей, это пример для конкретного id категории. А как выглядит код в общем виде? Можете на brainsolid@gmail.com прислать?

  23. # Зайва Игорь Леонидович (2) 09.03.2009 в 03:00

    По моему оно не работает, ой какой ужас... то ли это сломалось, то ли другое ??? ой, капец... %)

    П.С. Пейджнави работает, но все классы не пашут чёй-то, меняю всё... :( Зря радовался... Если получится заменить ПН на самопал, отпишусь здесь.

  24. # Андрей 14.03.2009 в 02:00

    Соника, подскажите, пожалуйста, а фильтрацию по годам таким образом можно ли сделать?

    Вставил ваш код — сортировка работает. Решил переделать, чтобы в выпадающем списке были года, и при выборе года оставались записи только этого года (то етсь не сортировка, а фидьтрация).

    Вставляю строчки:

    if ($_POST['select'] == '2009') { $order = "&year2009"; $s4 = ' selected="selected"'; $s2 = ''; }

    и

    <option value="2009">За 2009 год

    В раскрывающемся списке появляется "за 2009 год", но при выборе этого пункта остаются так же записи за 2008-й.

    Что не так?

  25. # Андрей 14.03.2009 в 03:26

    Простите за невнимательность, забыл равно в тексте поставить.
    Все работает.

  26. # web 22.08.2009 в 00:54

    А как подобным образом сортировать по рейтингу wp-postratings

  27. # Николай 22.09.2009 в 07:50

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

  28. # sonika (301) 24.09.2009 в 20:51

    web ,Николай: плагин WP Smart Sort

  29. # Виталий (2) 05.10.2009 в 20:49

    Извините, вы сказали добавлять перед началом цикла? Я просто только только начинаю юзать ВродПресс. Где находиться это начало? В какой файл это вставлять?

  30. # sonika (301) 05.10.2009 в 21:30
  31. # Виталий (2) 05.10.2009 в 21:49

    А скажите, нет ли чего-нибудь для статической сортировки постов?

  32. # sonika 06.10.2009 в 12:55

    Виталий, видимо вам нужно это: _http://codex.wordpress.org/Template_Tags/query_posts

  33. # Виталий (1) 06.10.2009 в 15:10

    Но там по английски всё, как русский язык включить?

  34. # sonika 06.10.2009 в 16:24

    Виталий, никак, на русском нет. Поищите про query_posts на форумах вордпресс или переведите с помощью он-лайн переводчика.

  35. # michael 07.10.2009 в 12:13

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

  36. # sonika 14.10.2009 в 12:47

    michael, погуглите table sort script

  37. # michael 23.10.2009 в 10:24

    Огромное спасибо, sonika

  38. # Алексей (1) 02.12.2009 в 09:17

    Это только сортировка, а как сделать фильтр с аналогичными выпадающими списками?

  39. # Karine (1) 06.12.2009 в 22:32

    Подскажите, может есть фильтр или плагин с помощью которого можно вывести 10 наиболее активных пользователей и количество опубликованых каждым постов

  40. # michael 17.12.2009 в 19:09

    у меня на странице находятся два выпадающих списка, первый нормально формирует ссылку при выборе (сайт.ру/?сат=Х), а второй просто выдает сайт.ру/Х - естественно ссылка не работает, хотя выводятся одинаково следующим образом:

    wp_dropdown_categories('child_of=64&orderby=name');

    s cript type=text/javascript><!- -
    var dropdown = document.getElementById("cat");
    function onCatChange() {
    if ( dropdown.options[dropdown.selectedIndex].value > 0 ) {
    location.href = "/?cat="+dropdown.options[dropdown.selectedIndex].value;
    }
    }
    dropdown.onchange = onCatChange;
    - ->/s c ript>

    как мне сделать, чтобы оба списка работали???

  41. # gtauter 06.04.2011 в 18:17

    Соника, добрый день! Хотел у Вас попросить помощи, сам уже весь моск сломал. :)
    Имеется сортировка вида (там побольше, но общий принцип такой)
    if ($_POST['payed'] == "Платные") {$args = "&meta_key=payed_value&meta_value=Да";}
    if ($_POST['free'] == "Бесплатные") {$args = "&meta_key=payed_value&meta_value=Нет";}
    Выводится все это так:
    query_posts($query_string.'&cat=-10,-11,-30'.$sort.$args.$args_1)
    Для навигации использую pagenavi. Ну и, собственно, проблема: при переходе на следующие страницы настройки сортировки слетают (и смысла в них, получается, нет). Выводил $query_string эхом: при выборе кнопок сортировки добавляются нужные значения, при переходе на следующие страницу остается только paged=[номер].
    Не могли бы Вы хотя бы подсказать, в каком направлении копать? Спасибо, с уважением.

  42. # Феликс 07.01.2012 в 21:42

    Никак не пойму как добавить запрос на сортировку по рейтингу вида query_posts("gdsr_sort=rating");
    в динамическую сортировку Dimox`a типа

    if ($_POST['select'] == 'title') { $order = "&orderby=title&order=ASC"; $s1 = ' selected="selected"'; $s2 = ''; }
    if ($_POST['select'] == 'newest') { $order = "&orderby=cost&order=DESC"; $s2 = ' selected="selected"'; }
    if ($_POST['select'] == 'oldest') { $order = "&orderby=cost&order=ASC"; $s3 = ' selected="selected"'; $s2 = ''; }
    if ($_POST['select'] == 'rating_h') { $order = что сюда писать? ; $s4 = ' selected="selected"'; $s3 = ''; }
    Подскажите пожалуйста, если вам не сложно :-)

  43. # Феликс 11.01.2012 в 18:34

    вот интересно, оказалось что если вывод делать как здесь <?php $posts = query_posts(order); ?>, то строка вида
    if ($_POST['select'] == 'rating') { $order = "gdsr_sort=rating&sort_order=asc"; $s5 = ' selected="selected"'; $s4 = ''; }
    работает, а если вывод сделать как у Dimoxa
    <?php $posts = query_posts($query_string . $order); ?>
    то сортировка по рейтингу от GD star rating работать перестает, а стандартные сортировки по $orderby работают.
    Почему из-за $query_string перестают работать команды GD star rating?
    Есть предположения?

  44. # vovasik 13.03.2012 в 14:07

    Круто вот только навигация  не будет работать

  45. # vovasik 18.03.2012 в 17:13

    ну да так все и оказалось)почему вот зачем именно POST-ом передавать эти какие в этом плюсы, вот GET-ом хоть пагинация не нарушается :( что за стиль программирования у вас такой....

  46. # Виталий 09.04.2012 в 10:35

    Сортирует, но какой смысл, если навигация не работает???
    WP Smart Sort проставил, сортирует, навигация работает, но в ленте по 2 одинаковых поста выходят, а в рубриках ошибка - "не найдено"
    Уффф!

  47. # Алексей 29.05.2014 в 15:27

    Возможна ли реализация данного функционала под ul li "стилизованный select"? Если да то как? Я в этом деле человек новый.

  48. # Сергей 04.07.2014 в 15:56

    Есть ли вариант сделать сортировку ссылками?

  49. # Наталья (1) 14.01.2015 в 18:16

    Подскажите, пожалуйста, как сделать, чтобы в разделе новости все посты были не на одной странице, а делились, например, 1,2,3.. страницы или предыдущие записи?спасибо.

  50. # флес 15.02.2016 в 11:06

    что за запись 6 [code='php'] ?????
    ломает весь вывод

Подписаться на фид.
RSS комментариев к этой записи. | TrackBack URI

Написать комментарий


Все саттелиты — в топку! Даже не сомневайтесь. Для вопросов о вордпресс не по теме поста есть два русскоязычных форума по wordpress.

[ ←Вернуться к стандартному виду ]

Печатная версия