Пагинация в WordPress с пользовательским типом записей?
Я искал решение по всему интернету, но ничего не работает. Может кто-то помочь с этим и объяснить, в чем проблема? Я потратил 3 часа на отладку, но так и не нашел причину.
Вот мой код:
global $paged;
global $wp_query;
wp_reset_query();
$per_page = get_option('posts_per_page');
$cat_cars = get_term_by('slug', 'cars', 'category');
$page_links_total = ceil($cat_cars->count / $per_page);
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'post_type' => 'cars',
'post_status' => 'publish',
'cat' => $cat_cars->term_id,
'orderby' => 'date',
'order' => 'DESC',
'posts_per_page' => $per_page,
'paged' => $paged
);
$page_links = paginate_links(array(
'base' => add_query_arg('paged', '%#%'),
'format' => '',
'prev_text' => __('«'),
'next_text' => __('»'),
'end_size' => 2,
'mid_size' => 1,
'type' => 'plain',
'total' => $page_links_total,
'current' => $paged
));
$car_query = new WP_Query($args);
А затем я вызываю have_posts
, the_post
и т.д.
Эта часть работает, пока я не перехожу на вторую страницу пагинации - там ничего не находится.

Недавно я столкнулся с подобной проблемой и выяснил, что причина заключается в том, что WordPress при запросе постов в категории сначала ищет записи с post_type равным 'post', прежде чем дойдет до точки, где вы запрашиваете post_type 'any' или какой-либо пользовательский тип записи. Это не вызывает проблем на первой странице, потому что даже если постов нет, он вызывает ваш шаблон. Однако на второй и последующих страницах он не находит записей с post_type 'post', поэтому загружает шаблон 404 до того, как ваш шаблон получит возможность изменить параметр post_type.
Это баг? Хороший вопрос. Я бы сказал, что да, потому что можно ожидать, что если вы регистрируете таксономию 'category' для других post_types, все типы записей должны отображаться в этом архиве, а не только стандартные записи.
Надеюсь, это поможет.

У меня есть этот код (очищенный) на сайте, который выводит записи из пользовательского типа записей, а внизу пагинацию, если записей больше 10:
<?php $wp_query = new WP_Query(); $wp_query->query('post_type=mycpt&showposts=10'.'&paged='.$paged);
while ($wp_query->have_posts()) : $wp_query->the_post();?>
<h3><?php the_title(); ?></h3>
<?php the_content();?>
<?php endwhile; wp_reset_query(); ?>
<?php if ( $wp_query->max_num_pages > 1 ) { ?>
<div id="nav-below" class="navigation">
<div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">«</span> Старые записи', 'twentyten' ) ); ?></div>
<div class="nav-next"><?php previous_posts_link( __( 'Новые записи <span class="meta-nav">»</span>', 'twentyten' ) ); ?></div>
</div>
<?php } ?>
Надеюсь, это поможет.
