get_posts()/query_posts() постраничная навигация

Hixon10
На сайте с 21.08.2010
Offline
125
4320

Добрый вечер.

Есть массив id записей, которые нужно вывести на определенной странице. Если записей больше 10, то нужна постраничная навигация.

Сражаюсь с данной задачей несколько часов, но ничего не получается.

Входные данные:

Массив id записей, которые никак между собой не связаны (у них разные рубрики, разные теги и т.д.). Например, есть массив $MyId из 11 элементов.

Пробовал такие варианты:

Данный код выводит 11 записей, функция wp_pagenavi(); ничего не выводит.


$args = array( 'numberposts' => count($MyId), 'include' => $MyId );
$myposts = get_posts( $args );
foreach ($myposts as $post) {...}

Данный код выводит 11 записей, функция wp_pagenavi(); ничего не выводит.


$args = array( 'numberposts' => 10(или любое другое число), 'include' => $MyId );
$myposts = get_posts( $args );
foreach ($myposts as $post) {...}

Данный код выводит 11 записей, функция wp_pagenavi(); ничего не выводит.


$args = array('include' => $MyId );
$myposts = get_posts( $args );
foreach ($myposts as $post) {...}

Данный код выводит 11 записей, функция wp_pagenavi(); ничего не выводит.


$args = array( 'numberposts' => count($MyId), 'include' => $MyId, 'posts_per_page' => -1 );
$myposts = get_posts( $args );
foreach ($myposts as $post) {...}

Данный код выводит 11 записей, функция wp_pagenavi(); ничего не выводит.


$args = array( 'numberposts' => count($MyId), 'include' => $MyId, 'posts_per_page' => 10 );
$myposts = get_posts( $args );
foreach ($myposts as $post) {...}

Данный код выводит 11 записей, функция wp_pagenavi(); ничего не выводит.


$args = array( 'include' => $MyId, 'posts_per_page' => 5 );
$myposts = get_posts( $args );
foreach ($myposts as $post) {...}

Другая группа вариантов:

Данный код выводит 5 записей, функция wp_pagenavi(); ничего не выводит.

query_posts( array( 'post__in' => $MyId, 'posts_per_page' => 5, 'paged' => 1 ) );  
if (have_posts()) { while (have_posts()) : the_post(); ...... endwhile; }

Данный код выводит 5 записей, функция wp_pagenavi(); ничего не выводит.


$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts( array( 'post__in' => $MyId, 'posts_per_page' => 5, 'paged' => $paged ) );
if (have_posts()) { while (have_posts()) : the_post(); ...... endwhile; }

Данный код выводит 5 записей, функция wp_pagenavi(); ничего не выводит.


$page = get_query_var('page');
query_posts( array( 'post__in' => $MyId, 'posts_per_page' => 5, 'paged' => $paged ) );
if (have_posts()) { while (have_posts()) : the_post(); ...... endwhile; }

Данный код выводит 5 записей, функция wp_pagenavi(); ничего не выводит.


$page = get_query_var('page');
query_posts( array( 'post__in' => $MyId, 'posts_per_page' => 5 ) );
if (have_posts()) { while (have_posts()) : the_post(); ...... endwhile; }

Данный код выводит 5 записей, функция wp_pagenavi(); ничего не выводит.


$page = get_query_var('page');
query_posts( array( 'post__in' => $MyId, 'posts_per_page' => 5, 'nopaging' => false) );
if (have_posts()) { while (have_posts()) : the_post(); ...... endwhile; }

Спасибо за помощь.

P.S. Во всех примерах, если зайти на страницу http://site.com/category-name/page/2, то появится сообщение о том, что ничего не найдено.

Веду свой невзрачный блог (http://hixon.ru/).
S1
На сайте с 13.03.2008
Offline
49
#1

Сталкивался с подобной проблемой. Решал вроде так: в functions.php

add_filter('pre_get_posts', 'pagination_fix');
function pagination_fix($query) {
if($query->is_category && !$query->is_admin)
$query->set('posts_per_page', get_option('post_per_page'));

return $query;
}

Работает только в категориях, для тегов или произвольных таксономий меняем свойство "is_category" на соответствующее

Ну и само собой ключ 'paged' =>:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
Дизайн сайтов (UI/UX), логотипов, баннеров и прочего... (/ru/forum/770062)
YW
На сайте с 09.03.2012
Offline
2
#2
Консультации по WordPress - icq 612425
Hixon10
На сайте с 21.08.2010
Offline
125
#3
smart1k:
Сталкивался с подобной проблемой. Решал вроде так: в functions.php

Работает только в категориях, для тегов или произвольных таксономий меняем свойство "is_category" на соответствующее
Ну и само собой ключ 'paged' =>:

Спасибо! Навигация появилась. Однако, к сожалению, если перейти на какую-либо страницу (http://site.com/category-name/page/2), то сервер возвращает 404-ую ошибку.

--------------------------

upd. Нашёл глупый способ, как можно убрать 404-ую ошибку. Можно, как вариант, к рубрике, в которой выводятся записи по $id, добавить записей из других рубрик. В этом случае, 404-ой ошибки не будет, а нужные записи будут показываться.

Плюсы:

1) Работает.

Минусы:

1) Максимальное количество записей, которые я хочу показать, не должно превышать количество постов, которые прикреплены к рубрике.

2) Способ противоречит здравому смыслу.

Надеюсь, что есть какие-то иные способы решения проблемы.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий