WordPress的分页函数不少,今天写个小笔记整理一下。基本的分页应该包括文章内部分页、post(或者custom post type)分页以及评论分页等。
目录
文章内部分页
文章内部分页指编辑文章时插入<!–nextpage–>标签将文章分成多个页面的分页方式。
使用的函数:wp_link_pages( $args )
主循环分页
主循环可以是post列表分页或者custom post type的分页。
使用的函数:paginate_links( $args )
通常用于主循环分页,在WordPress文档的介绍中提到
Technically, the function can be used to create paginated link list for any area
确实,这个函数可以用于任何自定义查询的分页,包括评论分页等。此函数本身不具备查询功能,而是从用户定义的查询语句中获取必要的参数(例如总页数、当前页数、url格式等),并按照分页格式打印结果。
用于自定义查询的例子
$total = $wpdb->get_var(" SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE user_id = $thisauthor->ID AND comment_post_id = ID AND comment_approved = 1 "); $comments_per_page = 100; $page = isset( $_GET['cpage'] ) ? abs( (int) $_GET['cpage'] ) : 1; echo paginate_links( array( 'base' => add_query_arg( 'cpage', '%#%' ), 'format' => '', 'prev_text' => __('«'), 'next_text' => __('»'), 'total' => ceil($total / $comments_per_page), 'current' => $page )); //The example is from http://wordpress.stackexchange.com/questions/3318/ paginate-result-set-from-wpdb-get-results
相关文章
评论分页
评论分页可以用paginate_links()完成,如果没有特殊要求,WordPress有一个专门用作评论分页的函数
使用的函数:paginate_comments_links( $args )
如果只需要输出上一页下一页的导航,可以用
previous_comments_link()
和
next_comments_link()
评论分页函调用了paginate_links()显示分页结果。
非WordPress内置的分页功能
WP-PageNavi
分页插件很多,最著名的当属WP-PageNavi,使用paginate_links(),用户需要自己写一些代码给该函数赋值,该函数是个显示接口,如果不告诉它要显示的是什么,当前是第几页,用什么格式显示,就会不知所措。用WP_PageNavi就方便多了,对于主循环分页,只要写上插件提供的模板标签即可。该插件甚至是某些收费主题的推荐安装插件,主题内置了对该插件的支持。
<?php if( function_exists('wp_pagenavi') ) wp_pagenavi(); ?>
WP-PageNavi不仅支持主循环,还支持custom post type分类和WP_User_Query,看wp_pagenavi函数的参数就知道了
$args = array( 'before' => '', 'after' => '', 'options' => array(), 'query' => $GLOBALS['wp_query'],//WP_Query实例 'type' => 'posts' //修改类型为custom_post_type );
文章内部分页:不显示页码显示标题
这个想法很有趣,文章内部分页时,通常是显示页码,用户并不知道下面几页的内容时什么,如果将页码换成一些比较有意义的标题,就能让文章未显示的内容更加明了。效果如下图所示,当然得稍微装饰一下,不要让用户误以为是标签链接。
实现的方法:
1. 编辑文章时,插入一个分页标签,除了要写上<!–nextpage–>,还要添加一个标签识别这一页的名称,例如<!–Section:Introduction–>。
<!-- 编辑文章时的源代码,注意Section参数 --> <!--Section:Introduction--> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. <!--nextpage--> <!--Section:Method--> Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. <!--nextpage--> <!--Section:Discussion--> Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. <!--nextpage--> <!--Section:Reference--> Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
在functions.php中或者插件中定义如下函数
/** * Replace page numbers with section titles in HTML comments * * @return void * @author Matthew Boynes */ function my_wp_link_pages() { global $post, $numpages, $multipage; if ($multipage) { $links = wp_link_pages(array( 'before' => '<div class="page-link">' . __( 'Pages:', 'toolbox' ), 'after' => '</div>', 'link_before' => '<b>', 'link_after' => '</b>', 'echo' => 0 )); if (preg_match_all('/<!--Section:(.*?)-->/i', $post->post_content, $custom_links)) { for ( $i = 1; $i < ($numpages+1); $i = $i + 1 ) { $links = preg_replace("#<b>$i</b>#",$custom_links[1][$i-1],$links); } } echo $links; } }-
然后在显示分页的地方(通常在single.php的主循环中,或者content-single.php中),添加代码,替换掉wp_link_pages()
<?php if( function_exists('my_wp_link_pages') ) my_wp_link_pages(); ?>
我在后台评论分页设置的是100条评论后分页,但留言板用per_page=20实现每20条就分页。而且把paginate_comments_links放到了wp_list_comments上面和下面。现在问题就出来了,放到下面的paginate_comments_links就有效显示了每20条评论后分页,但放到上面的paginate_comments_links就按后台设置100条分页方式分页了。这个怎么破?
代码如下:
代码被过滤了,但相信你大概明白了我的意思
代码如下:
我记得评论分页代码必须放在wp_list_comments函数后面,才能通过per_page方式修改页数,你可以考虑去掉上面那个分页代码,用js直接复制下面的分页代码到上面那个位置。
感觉JS有点麻烦。这个问题我给comments.php加per_page=100,后台评论分页设置25解决了。
js就一句话,jquery. clone().appendTo。以前也试过代码修改评论分页,当开启嵌套评论,用户提交留言恰好需要放到下一页时,提交后跳转地址会出错,不知道现在还有这问题不
觉得您的博客非常不错,我的站点http://www.9elite.com,能加个友情链接吗?
可以,不过我没有天天点友情链接或者去友链灌水的习惯,我宁可花更多时间写原创文章,如果你觉得这样okay的话就交换一下。我加上你了。