我建议使用 3 种方法使用自定义帖子 wp_query 进行分页。不幸的是,到目前为止,还没有很多关于这方面的好的信息,或者至少在某些情况下还不清楚。希望这有帮助!
请注意,您也确实将 wp_reset_postdata() 放在了错误的位置,但还需要更多才能使其正常工作。
选项 1 - 使用 max_num_pages 变量
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'posts_per_page' => 1,
'paged' => $paged,
'post_type' => 'cpt_type'
);
$cpt_query = new WP_Query($args);
?>
<?php if ($cpt_query->have_posts()) : while ($cpt_query->have_posts()) : $cpt_query->the_post(); ?>
//Loop Code Here...
<?php endwhile; endif; ?>
<nav>
<ul>
<li><?php previous_posts_link( '« PREV', $cpt_query->max_num_pages) ?></li>
<li><?php next_posts_link( 'NEXT »', $cpt_query->max_num_pages) ?></li>
</ul>
</nav>
你会在上面看到,格式略有不同previous_posts_link
and next_posts_link
现在可以访问max_num_pages
多变的。访问时一定要使用自己的查询变量名max_num_pages
。请注意,我使用 $cpt_query 因为这是我的查询示例的变量。
选项 2 - 暂时使用 $wp_query 变量进行循环查询
这是很多人推荐的,但要小心将 $wp_query 变量分配给临时变量并重新分配它,否则您会遇到各种麻烦。这就是为什么我推荐选项#1。如上所述CSS 技巧 http://css-tricks.com/snippets/wordpress/paginate-custom-post-types/,你可以这样做:
<?php
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query('showposts=6&post_type=news'.'&paged='.$paged);
while ($wp_query->have_posts()) : $wp_query->the_post();
?>
<!-- LOOP: Usual Post Template Stuff Here-->
<?php endwhile; ?>
<nav>
<?php previous_posts_link('« Newer') ?>
<?php next_posts_link('Older »') ?>
</nav>
<?php
$wp_query = null;
$wp_query = $temp; // Reset
?>
选项 3 - 使用 WP-pagenavi 插件
就像另一种选择一样,您可以使用WP-pagenavi http://wordpress.org/plugins/wp-pagenavi/插件,并按照选项 1 中的方式设置查询。但是,一旦安装了插件,请对代码进行一项更改,删除元素中的所有内容并用此函数替换。所以你将以:
<nav>
<?php wp_pagenavi( array( 'query' => $cpt_query ) ); ?>
</nav>