代码实现WordPress评论列表显示楼层

大前端 DUX 主题相信很多博主都了解,是国内程序员开发的一款新闻资讯类主题,我们曾经也使用了一段时间,DUX 主题设计简约响应急速,深受很多建站博主好评,前几天有人问我 DUX 评论列表后面的楼层是怎么实现的,这东西根本不是我写的好吧。用过大前端 DUX 主题的站长应该都知道,大前端 dux 主题的评论列表就有楼层计数功能,拿过来用不就行了?大家也学习下大前端的写法,毕竟人家可是国内的大佬,值得学习。
代码实现WordPress评论列表显示楼层-云模板该文件位于 dux 主题目录下的 modules 文件夹中,名字叫做 mo_comments_list.php,下面是源码。

  1. /**
  2.  * [mo_comments_list description]
  3.  * @param  [type] $comment [description]
  4.  * @param  [type] $args    [description]
  5.  * @param  [type] $depth   [description]
  6.  * @return [type]          [description]
  7.  */
  8. function mo_comments_list($comment, $args, $depth) {
  9.     $GLOBALS['comment'] = $comment;
  10. 
    
  11.     global $commentcount, $wpdb, $post;
  12.     if(!$commentcount) { //初始化楼层计数器
  13. 
    
  14.         $page     = get_query_var('cpage');//获取当前评论列表页码
  15.         $cpp      = get_option('comments_per_page');//获取每页评论显示数量
  16.         $pcs      = get_option('page_comments');//分页开关
  17. 
    
  18.         $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post->ID AND comment_type = '' AND comment_approved = '1' AND !comment_parent");
  19.         $cnt      = count($comments);//获取主评论总数量
  20. 
    
  21.         if ( get_option('comment_order') === 'desc' ) { //倒序
  22.             if (!$pcs || ceil($cnt / $cpp) == 1 || ($page > 1 && $page  == ceil($cnt / $cpp))) {
  23.                 $commentcount = $cnt + 1;//如果评论只有1页或者是最后一页,初始值为主评论总数
  24.             } else {
  25.                 $commentcount = $cpp * $page + 1;
  26.             }
  27.         }else{ //顺序
  28.             if( !$pcs ){
  29.                 $commentcount = 0;
  30.             }else{
  31.                 $page = $page-1;
  32.                 $commentcount = $cpp * $page;
  33.             }
  34.         }
  35.     }
  36. 
    
  37.     echo '<li '; comment_class(); echo ' id="comment-'.get_comment_ID().'">';
  38.  if(!$parent_id = $comment->comment_parent ) {
  39.         echo '<span class="comt-f">#'. (get_option('comment_order') === 'desc'?--$commentcount:++$commentcount) .'</span>';
  40.     }
  41.  echo '<div class="comt-avatar">';
  42.         echo _get_the_avatar($user_id=$comment->user_id, $user_email=$comment->comment_author_email);
  43.     echo '</div>';
  44. echo '<div class="comt-main" id="div-comment-'.get_comment_ID().'">';
  45. comment_text();
  46. if ($comment->comment_approved == '0'){
  47.             echo '<span class="comt-approved">待审核</span>';
  48.         }
  49.  echo '<div class="comt-meta"><span class="comt-author">'.get_comment_author_link().'</span>';
  50.             echo _get_time_ago($comment->comment_date);
  51.             if ($comment->comment_approved !== '0'){
  52. $replyText = get_comment_reply_link( array_merge( $args, array('add_below' => 'div-comment', 'depth' => $depth, 'max_depth' => $args['max_depth'] ) ) );
  53.                 // echo str_replace(' href', ' href="javascript:;" data-href', $replyText ); 
  54.                 if( strstr($replyText, 'reply-login') ){
  55.  echo preg_replace('# class="[sS]*?" href="[sS]*?"#', ' class="signin-loader" href="javascript:;"', $replyText );
  56.                 }else{
  57.                   echo preg_replace('# href=[sS]*? onclick=#', ' href="javascript:;" onclick=', $replyText );
  58.                 }
  59.             }
  60. echo '</div>';
  61. echo '</div>';
  62. }

使用方法一

像 dux 一样,在主题目录下建立 modules 文件夹,然后将上面的代码保存在该文件夹中,再利用如下代码加载到 wordpress 中。

  1. function _moloader($name = '', $apply = true) {
  2. 	if (!function_exists($name)) {
  3. 		include get_stylesheet_directory() . '/modules/' . $name . '.php';
  4. 	}
  5. 
    
  6. 	if ($apply && function_exists($name)) {
  7. 		$name();
  8. 	}
  9. }

加载方式多种多样,直接使用 include 引用也是可以的。然后通过 _moloader(‘mo_comments_list’, false);来加载上面的代码,最后就是使用了。WordPress 提供了评论列表加载方法 wp_list_comments 函数,该函数可以携带回调函数 callback。

  1. wp_list_comments('type=comment&callback=mo_comments_list');

上述代码的意思是取出评论数据,并交给回调函数 mo_comments_list 来处理,mo_comments_list 就是上面我们的楼层计数方法,其中包含了输出评论的内容。

使用方法二

直接将上面的代码写在 functions.php 文件中,返回在文章页适当位置使用下面代码来调用。

  1. wp_list_comments('type=comment&callback=mo_comments_list');

是不是觉得方法二简单很多呢?确实如此,只要你不嫌弃你的 functions 文件太大,随便你哦。以上就是 DUX 主题同款 WordPress 评论列表显示楼层实现代码方法,希望您能学到有用的东西,当然如果你有更好的方法不妨与我们交流。

原创文章,作者:DavidWu,如若转载,请注明出处:https://www.davidwu.net/archives/94854

WordPress安全防护插件
服务项目 服务内容 收费标准(元)
开发定制 WordPress主题/插件开发定制 (以最终需求为准)
主题/插件汉化 汉化团队WordPress主题/插件,翻译率95% (以标的主题/插件的句子数量为准)
服务器环境配置 基于您现有服务器,搭建配置网站运行环境,结合我们多年来实战经验,可完美支持WordPress等PHP程序运行,并配置伪静态规则、优化目录权限等问题。服务器我们强烈推荐使用Linux系统。 100元/次
网站托管 若贵站目前尚无技术人员,无法完成服务器环境配置,可选择我们的网站托管服务,直接交付正常运行的WordPress站点,并且无需担心服务器的后续维护工作,一切都由我们来帮您完成。 标配套餐:1000元/年/站点 高配套餐:联系客服获取
网站加速优化 从服务器后端配置优化到WordPress数据库缓存、前端页面缓存、JS和CSS压缩合并,全方位优化网站加载速度,实现秒开。(此服务仅针对(云)服务器/VPS) 500元/次(仅站内优化200元/次)
主题配置 本站所有主题均支持,可快速实现,若有任何问题可以咨询客服解决,若您希望我们提供配置服务,可选购此服务。 英文主题安装 60元/次 汉化主题安装 30元/次
HTTPS配置 HTTPS已经不断普及,并且有着更高的安全性以及SEO上的优待。该服务收取的为服务费,SSL证书产生的费用请自行承担。 100元/次
网站搬家 迁移网站所有文件和数据库信息、网站相关配置的调整、以及迁移中的疑难问题故障排除。 标准收费:500元/次 若网站数据量大,需协商
网站运维 提供整站的运维服务,保证网站正常运行。包含:网站故障定位及排除、网站数据备份和恢复、网站攻击及木马等问题的处理等 标准收费:2000元/年 IP 5000以上需协商

发表评论

电子邮件地址不会被公开。 必填项已用*标注

51建站客服微信二维码
点击这里购买