给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的计数器程序
Oct 09 PHP
PHP的FTP学习(四)
Oct 09 PHP
php下的权限算法的实现
Apr 28 PHP
PHP 字符串 小常识
Jun 05 PHP
php学习之简单计算器实现代码
Jun 09 PHP
php仿QQ验证码的实例分析
Jul 01 PHP
简单实用的PHP防注入类实例
Dec 05 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
Jan 22 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
基于swoole实现多人聊天室
Jun 14 PHP
Laravel 错误提示本地化的实现
Oct 22 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
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
浅谈Laravel中的一个后期静态绑定
2017/08/11 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
另类调用flash无须激活的方法
2006/12/27 Javascript
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
javascript实现table表格隔行变色的方法
2015/05/13 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
jQuery动态加载css文件实现方法
2016/06/15 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
[01:09:01]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第一场 10.28
2020/10/28 DOTA
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
Python基于sftp及rsa密匙实现远程拷贝文件的方法
2016/09/21 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
Pandas中resample方法详解
2019/07/02 Python
打包PyQt5应用时的注意事项
2020/02/14 Python
windows系统Tensorflow2.x简单安装记录(图文)
2021/01/18 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
大学自我评价
2014/02/12 职场文书
postgresql 删除重复数据案例详解
2021/08/02 PostgreSQL
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python