编写PHP脚本来实现WordPress中评论分页的功能


Posted in PHP onDecember 10, 2015

方法说明

首先来看看可能被用到的方法. 打开文件 wp-includes/link-template.php 你会发现 WordPress 2.7 多了 4 个针对评论分页的方法:

  • get_comments_pagenum_link
  • $pagenum: 页码
  • $max_page: 最大页数

返回链接地址. 在本次应用中不会被用到, 但大家应该知道有这个方法, 将方便你制作插件.

next_comments_link

$label: 显示的字样, 默认是 » Newer Comments. 但我一直认为这是 bug, 应该是 Newer Comments » 吧?

$max_page: 最大页数

显示跳转到下一页的链接.

previous_comments_link
$label: 显示的字样, 默认是 « Older Comments.
显示跳转到上一页的链接.

paginate_comments_links
$args: 字符串参数组
- base: 页面 URL
- format: 我也不知道是什么. 谁能告诉我?
- total: 最大页数
- current: 当前页码
- echo: 是否显示, 默认为显示. 不显示时返回字符串 HTML.
- add_fragment: hash, 默认是 #comments. 为求统一, 方便理解, 也免得修改, 建议制作主题时 评论部分用 id="comments"
显示评论分页或返回评论分页的 HTML.

实例说明

1. 上一页和下一页
这是最简单, 也是最常被提到的, 效果与文章分页没什么两样.

<div id="commentnavi">
 <span class="floatleft"><?php previous_comments_link(__('« Older Comments')) ?></span>
 <span class="floatright"><?php next_comments_link(__('Newer Comments »')) ?></span>
 <div class="fixed"></div>
</div>

2. 导航式分页
对访客最透明, 使用起来最方便的, 效果与使用 WP-PageNavi 分页的效果相仿.

<div id="commentnavi">
 <?php paginate_comments_links(); ?>
</div>

看看前面的两个例子, 好像我们要的功能都可以实现了. 但是你觉不觉得有点怪怪的? 如果后台中选择不显示评论分页, 或者评论数不够分页, 也要显示 id="commentnavi" 的外框吗? 不! 我们要改改这个程序.
可以通过调用方法 get_option('page_comments') 来获取后台的评论分页选项.
我们还可以调用方法 paginate_comments_links('echo=0') 来知道评论是否足够并需要进行分页处理.

3. 上一页和下一页 (改进)

<?php
 // 如果用户在后台选择要显示评论分页
 if (get_option('page_comments')) {
 // 获取评论分页的 HTML
 $comment_pages = paginate_comments_links('echo=0');
 // 如果评论分页的 HTML 不为空, 显示上一页和下一页的链接
 if ($comment_pages) {
?>
 <div id="commentnavi">
 <span class="floatleft"><?php previous_comments_link(__('« Older Comments')) ?></span>
 <span class="floatright"><?php next_comments_link(__('Newer Comments »')) ?></span>
 <div class="fixed"></div>
 </div>
<?php
 }
 }
?>

4. 导航式分页 (改进)

<?php
 // 如果用户在后台选择要显示评论分页
 if (get_option('page_comments')) {
 // 获取评论分页的 HTML
 $comment_pages = paginate_comments_links('echo=0');
 // 如果评论分页的 HTML 不为空, 显示导航式分页
 if ($comment_pages) {
?>
 <div id="commentnavi">
 <?php echo $comment_pages; ?>
 </div>
<?php
 }
 }
?>

对于最新的评论分页功能, 我有点自己的看法, 也随便说一下吧.
评论分页并不完美. 如果外面某个链接转跳到 http://www.example.com/#5630, 但是编号为 5630 的评论并不在第一页, 那么就无法定位到这条评论上面, 转跳过来的兄弟的感觉会比较不爽.
另外, WordPress 的评论分页不是 AJAX 应用 (为浏览器的兼容性考虑, 以后也不太可能是), 所以翻页会相当耗时. 所以我建议, 就算要分页, 也要将每页显示的评论数设大一点. 30? 50? 100? 因博而异.

好了, 大概你已经知道该怎么使用了? CSS 就不多说了, 各有所好嘛, 这个不好说.

PHP 相关文章推荐
用PHP发电子邮件
Oct 09 PHP
php下使用strpos需要注意 === 运算符
Jul 17 PHP
php header Content-Type类型小结
Jul 03 PHP
AJAX的跨域访问-两种有效的解决方法介绍
Jun 22 PHP
php5.2以下版本无json_decode函数的解决方法
May 25 PHP
php获取数组元素中头一个数组元素值的实现方法
Dec 20 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
浅析php设计模式之数据对象映射模式
Mar 03 PHP
PHP二维数组矩形转置实例
Jul 20 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
Nov 20 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 PHP
PHP读取PPT文件的方法
Dec 10 #PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 #PHP
PHP创建PowerPoint2007文档的方法
Dec 10 #PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
Dec 10 #PHP
调试WordPress中定时任务的相关PHP脚本示例
Dec 10 #PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
Dec 10 #PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
Dec 10 #PHP
You might like
用穿越火线快速入门php面向对象
2012/02/22 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
ASP.NET MVC中EasyUI的datagrid跨域调用实现代码
2012/03/14 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
js带闹铃功能的倒计时代码
2016/09/29 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
小程序开发基础之view视图容器
2018/08/21 Javascript
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
2018/09/29 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
VUE项目中加载已保存的笔记实例方法
2019/09/14 Javascript
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
举例讲解Python设计模式编程的代理模式与抽象工厂模式
2016/01/16 Python
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
pymongo中聚合查询的使用方法
2019/03/22 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
使用 Python 读取电子表格中的数据实例详解
2020/04/17 Python
Pytorch转onnx、torchscript方式
2020/05/25 Python
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
日语求职信范文
2013/12/17 职场文书
乌镇导游词
2015/02/02 职场文书
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技