caogenbj 的分页是作者自己写的 lingfeng_pagenavi(),一百多行,用 for 循环拼出一堆 <li>。
能跑,但里面有几个问题(下一篇细讲)。这一篇先说:WordPress 其实自带分页函数,不用自己造。
<?php previous_posts_link( '上一页' ); ?>
<?php next_posts_link( '下一页' ); ?>
两个函数直接输出链接。第一页时,previous_posts_link 什么都不输出;最后一页时,next_posts_link 什么都不输出。
就这么简单。适合极简主题。
想要“1 2 3 … 下一页”那种数字分页,用 paginate_links():
<?php
echo paginate_links( array(
'prev_text' => '上一页',
'next_text' => '下一页',
) );
默认它会读主查询的总页数和你当前所在页,不用传 total 和 current(除非你用的是自定义查询)。
它输出的 HTML 是 <a> 和 <span> 交替,外面自带一个 .page-numbers 的容器,可以直接写 CSS。
自造 lingfeng_pagenavi |
paginate_links |
|
|---|---|---|
| 代码量 | 100+ 行 | 1 行 |
| 维护 | 自己改 | WordPress 维护 |
| 兼容性 | 看写法 | 官方保证 |
| 样式 | 自己定 class | .page-numbers |
结论:除非你有很特殊的显示需求,否则别自己造分页轮子。
我猜是当年为了让分页长得像 Bootstrap 的 pagination 组件(那个组件要求 <ul class="pagination"><li>...</li></ul> 结构),而 paginate_links 输出的是 <a>,结构对不上。
这种“为了配合框架而自造”的思路本身没错,但要注意写法——下一篇会看到,它在“空 li”上翻了车。
分页函数只能在“有多篇文章”的页面用(首页、分类页、搜索页)。文章页、页面没有分页,调了也没输出。
所以一般会包一层判断:
<?php if ( $wp_query->max_num_pages > 1 ) : ?>
<?php previous_posts_link( '上一页' ); ?>
<?php next_posts_link( '下一页' ); ?>
<?php endif; ?>
一句话记住:分页别自己造轮子——简单用 previous/next_posts_link,要数字用 paginate_links。
下一篇看 caogenbj 那个自造分页的具体问题。