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

Делаю ручками сборку недельных архивов.

ЧПУ на недельные архивы выглядят так: http://мойсайт.ru/2009/?w=5

Вопрос – можно ли ручками приписать в URL дополнительный параметр, чтобы при клике на эту ссылку выводился архив вордпресса за указанную неделю с сортировкой записей от понедельника в пятнице, а не наоборот (как сделано по умолчанию)?

Версия вордпресса, если это имеет значение, 2.5.

PS: Как понимать внутри вордпресса, что выданный архив – недельный. is_month() есть, is_day() есть. А is_week() нету ((

Вопрос - можно ли ручками приписать в URL дополнительный параметр, чтобы при клике на эту ссылку выводился архив вордпресса за указанную неделю с сортировкой записей от понедельника в пятнице, а не наоборот (как сделано по умолчанию)?

Параметр направления сортировки нужно задавать не в урле, а в query_posts или чем Вы там получаете массив постов.

PS: Как понимать внутри вордпресса, что выданный архив - недельный. is_month() есть, is_day() есть. А is_week() нету ((

А как хотите, так и понимайте 🙂 Не нравится – допишите функционал.

function is_week() {
    global $wp_query;
    return $wp_query->query_vars['w'];
}
Параметр направления сортировки нужно задавать не в урле, а в query_posts или чем Вы там получаете массив постов.

То есть нет такого параметра для урла?

Насчет query_posts. Как я понимаю, когда вордпресс обрабатывает урл вида http://мойсайт.ru/2009/?w=2, то он сваливается в archive.php. То есть считает такой урл архивом (и правильно делает ибо это – недельный архив).

У меня в archive.php нет query_posts. За вывод постов там (насколько я понимаю) ответственен цикл <?php while (have_posts()) : the_post(); ?>. Могу предположить, что он проверяет есть ли очередной пост в массиве (где-то уже полученном, а может на ходу и получаемом), и если да – выводит его "на печать".

Как тут привинтить сортировку – непонятно.

[quote=aja711]PS: Как понимать внутри вордпресса, что выданный архив - недельный. is_month() есть, is_day() есть. А is_week() нету ((

А как хотите, так и понимайте 🙂 Не нравится – допишите функционал.[/quote]
🙂

function is_week() {
    global $wp_query;
    return $wp_query->query_vars['w'];
}

И как этот код потом использовать?

PS: Спасибо за отклик на проблему.

То есть нет такого параметра для урла?

Может и есть, за ними не уследишь 🙂

Насчет query_posts. Как я понимаю, когда вордпресс обрабатывает урл вида http://мойсайт.ru/2009/?w=2, то он сваливается в archive.php. То есть считает такой урл архивом (и правильно делает ибо это - недельный архив).

У меня в archive.php нет query_posts. За вывод постов там (насколько я понимаю) ответственен цикл <?php while (have_posts()) : the_post(); ?>. Могу предположить, что он проверяет есть ли очередной пост в массиве (где-то уже полученном, а может на ходу и получаемом), и если да - выводит его "на печать".

Как тут привинтить сортировку - непонятно.

Ну это-то как раз классика жанра. Перед Циклом (Loop его зовут) ставится query_posts($query_string . "&order=ASC") (Пример из Кодекса http://codex.wordpress.org/Template_Tags/query_posts )

И как этот код потом использовать?

Его можно вставить functions.php своей Темы или сделать из него плагин. Тогда можно будет использовать эту функцию для разворота только недельных списков, типа так:

if (is_week()) query_posts($query_string . "&order=ASC");

Можно, конечно, и $_GET[‘w’] проверять, но это как-то некошерно смотрится 🙂

Спасибо, ещё раз.

С Вашей помощью научился отлавливать недельные архивы. Добавил функцию в functions.php, с помощью нее в шаблоне темы archive.php отлавливаю теперь недели и меняю для них порядок вывода постов и их количество.

Чисто ради интереса остался такой вопрос – а насколько сильно использование описанной Вами функции загружает сервер? Не в абсолютных, понятное дело, величинах, а в относительных? Проверка, скажем, на день с помощью conditional tag’а is_day() "быстрее" проходит описанной проверки "на неделю" или нет?

PS: И уж совсем такой отстраненный вопрос – а насколько в Wordress вообще развита/принята передача параметров в URL’е?

Anonymous
Отправить
Ответ на: