给WordPress中的留言加上楼层号的PHP代码实例


Posted in PHP onDecember 14, 2015

最近突然发现博客的评论楼层有点问题,之前一直设置的是“在每个页面顶部显示新的评论”,也就是所谓的倒序显示评论,但是主题只支持顺序的评论楼层好,于是楼层和楼层号之间对不上。搜了一下在zww.me发现有实现的代码,但是放到博客之后无法正常工作,比如限制分页显示为25条的时候,文章只有一条评论时也显示的25楼。折腾了一下搞定了,做个记录,也供大家参考。

在主题文件 functions.php中找到$GLOBALS['comment'] = $comment;在后面加上下面的代码:

/* 主评论计数器 */
 global $commentcount,$wpdb, $post;
 if(!$commentcount) { //初始化楼层计数器
  if ( get_option('comment_order') === 'desc' ) { //倒序
  $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post->ID AND comment_type = '' AND comment_approved = '1' AND !comment_parent");
  $cnt = count($comments);//获取主评论总数量
  $page = get_query_var('cpage');//获取当前评论列表页码
  $cpp=get_option('comments_per_page');//获取每页评论显示数量
  if (ceil($cnt / $cpp) == 1 || ($page > 1 && $page == ceil($cnt / $cpp))) {
   $commentcount = $cnt + 1;//如果评论只有1页或者是最后一页,初始值为主评论总数
  } else {
   $commentcount = $cpp * $page + 1;
  }
  }else{ //顺序
  $page = get_query_var('cpage')-1;
  $cpp=get_option('comments_per_page');//获取每页评论数
  $commentcount = $cpp * $page;
  }
 }
/* 主评论计数器 end */
 if ( !$parent_id = $comment->comment_parent ) {
  $commentcountText = '<div class="floor">';
  if ( get_option('comment_order') === 'desc' ) { //倒序
  $commentcountText .= --$commentcount . '楼';
  } else {
  switch ($commentcount) {
   case 0:
   $commentcountText .= '<span>沙发!</span>'; ++$commentcount;
   break;
   case 1:
   $commentcountText .= '<span>板凳!</span>'; ++$commentcount;
   break;
   case 2:
   $commentcountText .= '<span>地板!</span>'; ++$commentcount;
   break;
   default:
   $commentcountText .= ++$commentcount . '楼';
   break;
  }
  }
  $commentcountText .= '</div">';
 }
 }

然后在合适的位置加上以下代码输出楼层号

<?php echo $commentcountText; //主评论楼层号 - by zwwooooo ?>

修改之后的代码应该是这样的(以官方最新的 wp_list_comments() 回调函数代码为例):

<?php
function mytheme_comment($comment, $args, $depth) {
 $GLOBALS['comment'] = $comment;
 /* 主评论计数器 by zwwooooo Modified Gimhoy(http://blog.gimhoy.com) */
 global $commentcount,$wpdb, $post;
 if(!$commentcount) { //初始化楼层计数器
  if ( get_option('comment_order') === 'desc' ) { //倒序
  $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post->ID AND comment_type = '' AND comment_approved = '1' AND !comment_parent");
  $cnt = count($comments);//获取主评论总数量
  $page = get_query_var('cpage');//获取当前评论列表页码
  $cpp=get_option('comments_per_page');//获取每页评论显示数量
  if (ceil($cnt / $cpp) == 1 || ($page > 1 && $page == ceil($cnt / $cpp))) {
   $commentcount = $cnt + 1;//如果评论只有1页或者是最后一页,初始值为主评论总数
  } else {
   $commentcount = $cpp * $page + 1;
  }
  }else{ //顺序
  $page = get_query_var('cpage')-1;
  $cpp=get_option('comments_per_page');//获取每页评论数
  $commentcount = $cpp * $page;
  }
 }
 /* 主评论计数器 end */
 if ( !$parent_id = $comment->comment_parent ) {
  $commentcountText = '<div class="floor">';
  if ( get_option('comment_order') === 'desc' ) { //倒序
  $commentcountText .= --$commentcount . '楼';
  } else {
  switch ($commentcount) {
   case 0:
   $commentcountText .= '<span>沙发!</span>'; ++$commentcount;
   break;
   case 1:
   $commentcountText .= '<span>板凳!</span>'; ++$commentcount;
   break;
   case 2:
   $commentcountText .= '<span>地板!</span>'; ++$commentcount;
   break;
   default:
   $commentcountText .= ++$commentcount . '楼';
   break;
  }
  }
  $commentcountText .= '</div">';
 }
 }

 extract($args, EXTR_SKIP);

 if ( 'div' == $args['style'] ) {
 $tag = 'div';
 $add_below = 'comment';
 } else {
 $tag = 'li';
 $add_below = 'div-comment';
 }
?>
 <<?php echo $tag ?> <?php comment_class(empty( $args['has_children'] ) ? '' : 'parent') ?> id="comment-<?php comment_ID() ?>">
 <?php if ( 'div' != $args['style'] ) : ?>
 <div id="div-comment-<?php comment_ID() ?>" class="comment-body">
 <?php endif; ?>
 <div class="comment-author vcard">
 <?php if ($args['avatar_size'] != 0) echo get_avatar( $comment, $args['avatar_size'] ); ?>
 <?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?>
 </div>
<?php if ($comment->comment_approved == '0') : ?>
 <em class="comment-awaiting-moderation"><?php _e('Your comment is awaiting moderation.') ?></em>
 <br />
<?php endif; ?>

 <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>">
 <?php
  /* translators: 1: date, 2: time */
  printf( __('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),' ','' );
 ?>
 </div>

 <?php comment_text() ?>

 <div class="reply">
 <?php comment_reply_link(array_merge( $args, array('add_below' => $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
 </div>

 <?php echo $commentcountText; //主评论楼层号 - by zwwooooo ?>

 <?php if ( 'div' != $args['style'] ) : ?>
 </div>
 <?php endif; ?>
<?php
 }

样式就自己添加吧~~

PHP 相关文章推荐
php在线打包程序源码
Jul 27 PHP
关于php 接口问题(php接口主要也就是运用curl,curl函数)
Jul 01 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
分析php://output和php://stdout的区别
May 06 PHP
php post json参数的传递和接收处理方法
May 31 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 PHP
Laravel定时任务的每秒执行代码
Oct 22 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
详细分析PHP 命名空间(namespace)
Jun 30 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
Dec 14 #PHP
php类中的$this,static,final,const,self这几个关键字使用方法
Dec 14 #PHP
Yii2隐藏frontend/web和backend/web的方法
Dec 12 #PHP
使用PHP+AJAX让WordPress动态加载文章的教程
Dec 11 #PHP
WordPress中制作导航菜单的PHP核心方法讲解
Dec 11 #PHP
搭建Vim为自定义的PHP开发工具的一些技巧
Dec 11 #PHP
PHP开发中AJAX技术的简单应用
Dec 11 #PHP
You might like
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
html+js实现动态显示本地时间
2013/09/21 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
JavaScript数组各种常见用法实例分析
2015/08/04 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
详解如何在Angular中快速定位DOM元素
2017/05/17 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python requests模块实例用法
2019/02/11 Python
Python中的十大图像处理工具(小结)
2019/06/10 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
详解用python生成随机数的几种方法
2019/08/04 Python
python通过实例讲解反射机制
2019/10/17 Python
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
傲盾软件面试题
2015/08/17 面试题
党员教师群众路线个人整改措施
2014/10/28 职场文书
行为规范主题班会
2015/08/13 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
Javascript的promise,async和await的区别详解
2022/03/24 Javascript