query_posts и постраничная навигация

При изменении условий вывода цикла WordPress — codex.wordpress.org/The_Loop через query_postscodex.wordpress.org/…/query_posts возникает проблема — не работает постраничная навигация (pagination). В этом случае, всегда демонстрируются только первые записи. Т.е. не работают next_posts_link и previous_posts_link при использовании query_posts() — WordPress функции указывающей, какие посты нужно показывать в базовом цикле WordPress. Функция вносит изменения в цикл WordPress, возвращает список постов.

Например, создан произвольный тип записи eventsixrevisions.com/wordpress/wordpress-custom-post-types-guide:

register_post_type( 'event',
    array(
      'labels' => $labels,
      ...

Затем, как рекомендовано по ссылке выше, создается шаблон для данного типа записей:

Template Name: Events Template

И вывод этого типа записей в нем:

query_posts(array('post_type'=>'event'));

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

Решение предлагает один из читателей в комментариях, необходимо дополнить вывод через query_posts до такого вида:

query_posts(array('post_type'=>'event','paged' => get_query_var('paged')));

Данное решение гораздо удобнее и проще большинства из тех, которые легко находятся поиском.

Возможно, разработчики поправят данное положение дел в новых версиях WordPress, указанная выше рекомендация относится к версиям 3.4.2 и ниже.

Опубликовано

Обратите внимание на предыдущие записи: