我建议使用自定义帖子 wp_query 进行分页的 3 种方法。不幸的是,直到今天还没有很多关于这方面的好信息,或者至少在某些情况下还不清楚。希望这会有所帮助!
请注意,您也确实将 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
略有next_posts_link
不同max_num_pages
。访问时请务必使用您自己的查询变量名称max_num_pages
。请注意,我使用 $cpt_query 因为这是我的查询示例的变量。
选项 2 - 暂时将 $wp_query 变量用于循环查询
这是很多人推荐的,但要小心将 $wp_query 变量分配给临时变量并重新分配它,否则您会遇到各种麻烦。这就是为什么我推荐选项#1。如CSS Tricks中所述,您可以执行以下操作:
<?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插件,并按照选项 #1 设置您的查询。但是,在安装插件后,对代码进行一次更改,删除元素中的所有内容并替换为此功能。所以你会结束:
<nav>
<?php wp_pagenavi( array( 'query' => $cpt_query ) ); ?>
</nav>