Бывает, человеку очень хочется, чтобы на первой странице его блога выводились посты только из одной категории — например, «Новости». Человек этот не особо заморачивался с темой блога, в папке темы у него не лежит ни 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/

Категория: PHP, HTML, CSS..., WordPress | Теги:

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

  1. compass | 21.06.2010

    Спасибо, помогло.

  2. Люк | 10.08.2010

    СПАСИБО ВАМ ОГРОМНОЕ!

  3. St.eV | 18.08.2010

    Спасибо за пост.
    Эта строчка
    буквально спасла меня :)

  4. AleDv | 20.11.2010

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

  5. Макс | 6.01.2011

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

  6. Goodwin | 9.11.2011

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

  7. Макс | 11.11.2011

    Спасибо Гудвин за добрые слова, рад что и ты нашел здесь что-то полезное :)

  8. Антон | 10.11.2012

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

  9. Mary | 23.02.2013

    Спасибо. Сэкономили несколько часов бесперспективной работы :)

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