Вывод на первой странице записей одной категории и постраничная навигация при query_posts

Бывает, человеку очень хочется, чтобы на первой странице его блога выводились посты только из одной категории — например, «Новости». Человек этот не особо заморачивался с темой блога, в папке темы у него не лежит ни single.php, ни category.php — все формируется по единому шаблону. Но вот для первой страницы человек решил сделать исключение.

Итак, первое, что ему надо сделать, добавить папку с темой файл home.php. Затем скопировать туда содержимое из файла index.php. Затем найти строчки, где начинается The Loop:

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

и перед ними добавить

<?php
query_posts('cat=1');
// здесь вместо цифры 1 надо подставить id нужной категории
?>

Вот теперь первая страница блога формируется в соответствии с шаблоном home.php, а все остальные в соответствии с index.php. Только, вот беда, плохо работают ссылки на предыдущие страницы — то есть, если захотеть отмотать новости назад, ничего не выйдет.

Поступим здесь точно так же, как я уже писал однажды на похожую тему: вместо query_posts(«cat=1») напишем примерно такое

<?php $numpost=10;//сколько записей на одной странице нам надо вывести
if($paged>1) $offset=$numpost*($paged-1);
else $offset=0;//чтобы знать, с какой статьи начать, если это не первая страница
query_posts('cat=1&offset='.$offset.'&showposts='.$numpost); ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

Теперь должно работать :-)
(в старых версиях ВП вместо параметра showposts использовался posts_per_page).

Если количеством записей необходимо управлять из админки (Настройки — Чтение). В примере выше количество выводимых записей ограничено в самом коде: $numpost=10, или плагин wp-pagenavi отказывается работать как положено, то может помочь следующий код:

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


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

Необходимо найти код начала цикла:

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

и вставить перед ним следующий код:

<?php
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("paged=$page");
?>

Ну и, естественно, если необходимо, в query_posts можно добавить дополнительные параметры, например, количество постов в этом цикле или рубрику, из которой из выбирать.


Еще немного подробностей о query_posts()

  • если нужно подкорректировать всего один параметр (к примеру, мы хотим на странице автора выводить другое, чем обычно, количество постов), то к этому параметру надо прибавлять переменную $query_string, которая позволит не «забыть» про все остальное. Выглядеть это должно примерно так: $query_posts($query_string.»&showposts=5″);
  • если надо вывести все категории, кроме одной, пишем query_posts(«cat=-3»);
  • если надо вывести все категории, кроме нескольких, пишем query_posts(«cat=-1,-2,-3»);
  • если вместо постов надо вывести содержимое страницы, пишем query_posts(‘page_id=7’); или query_posts(‘pagename=about’);
  • если нам нужен какой-то конкретный пост, пишем query_posts(‘p=1’); или query_posts(«name=first-post»);
  • если нам нужны записи за конкретный год и месяц, пишем query_posts(‘monthnum=12&year=2004’);

h++p://blog.trampampam.ru/wordpress/query_posts/
h++p://www.sonika.ru/blog/wordpress/query-posts-navigation.htm
h++p://wphacks.name/pagination-on-query-posts/

9 комментариев

  1. Спасибо вам огромное!!! Уже давно искал решение этой проблемы с постраничной навигацией, ваш пост очень помог!

  2. Хочу заметить, что приведенные здесь коды способны помочь вывести записи из определенной категории только на главной странице, если попытаетесь применить их для вывода записей категорий на како-нибудь внутренней СТРАНИЦЕ, то не будет работать постраничная навигация PageNavi

  3. Браво, отличные решения. Уж на что я хорошо знаю WP, но вот на счет вывода списка избранных записей под управлением pagenavi — пришлось в сети искать. Ваши решения самые лучшие. Спасибо.

  4. Очень хочу сказать: СПАСИБО Вам огромное!
    Я, мучился три часа, чтобы так сделать!
    Искал в интернете решения и только Ваше мне помогло! СПАСИБО!

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

Ваш электронный адрес не будет опубликован.


*


8 + 8 =