优化WordPress评论楼层号,可同时支持顺序倒序排列

投稿  懿古今 2016-12-27 07:29 阅读 189 次 评论 17 条

不知道大家是否有关注过,部分集成有评论楼层号的WordPress主题只能按规则在后台中设置讨论 > 在每个页面顶部显示“旧的”评论(顺序排列,如鸟哥的Ality主题)或“新的”评论(倒序排列,如Nana主题),如不按规则设置楼层号就会显示错误。那么我们能不能优化一下楼层号,让它同时支持顺序或倒序而楼层号又不出错呢?办法是有的,今天懿古今就跟大家说一说如何优化WordPress评论楼层号。

第一种情况:倒序排列(即“新的”评论在顶部)

优化WordPress评论楼层号,可同时支持顺序倒序排列 倒序排列(即“新的”评论在顶部)

如上图所示,Nana主题的评论就是典型的倒序排列,下面我们来把它优化成同时支持顺序或倒序排列而又不会造成楼层号错误。

具体修改步骤如下:

打开inc\functions\comment-template.php文件,首先找到以下代码(约在15-26行)

  1. global $commentcount,$wpdb$post;
  2. if(!$commentcount) { //初始化楼层计数器
  3.     $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post->ID AND comment_type = '' AND comment_approved = '1' AND !comment_parent");
  4.     $cnt = count($comments);//获取主评论总数量
  5.     $page = get_query_var('cpage');//获取当前评论列表页码
  6.     $cpp=get_option('comments_per_page');//获取每页评论显示数量
  7.     if (ceil($cnt/$cpp) == 1 || ($page>1 && $page == ceil($cnt/$cpp))) {
  8.         $commentcount = $cnt + 1;//如果评论只有1页或者是最后一页,初始值为主评论总数
  9.     } else {
  10.           $commentcount = $cpp * $page + 1;
  11.     }
  12. }

修改成

  1. // 楼层   
  2. $comorder =  get_option('comment_order');
  3. if($comorder == 'asc'){
  4.     //在页面顶部显示 旧的 评论
  5.     global $commentcount;
  6.     if(!$commentcount) {
  7.         if ( get_query_var('cpage') > 0 )
  8.             $page = get_query_var('cpage')-1;
  9.         else $page = get_query_var('cpage');
  10.             $cpp=get_option('comments_per_page');
  11.             $commentcount = $cpp * $page;
  12.     }
  13. }else{
  14.     //在页面顶部显示 新的 评论
  15.     global $commentcount,$wpdb$post;
  16.     if(!$commentcount) { //初始化楼层计数器
  17.         $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post->ID AND comment_type = '' AND comment_approved = '1' AND !comment_parent");
  18.         $cnt = count($comments);//获取主评论总数量
  19.         $page = get_query_var('cpage');//获取当前评论列表页码
  20.         $cpp=get_option('comments_per_page');//获取每页评论显示数量
  21.         if (ceil($cnt/$cpp) == 1 || ($page>1 && $page == ceil($cnt/$cpp))) {
  22.             $commentcount = $cnt + 1;//如果评论只有1页或者是最后一页,初始值为主评论总数
  23.         } else {
  24.             $commentcount = $cpp * $page + 1;
  25.         }
  26.     }
  27. }

接着找到以下代码

  1. if(!$parent_id = $comment->comment_parent){
  2.                              switch ($commentcount){
  3.                                 case 2 :echo " 沙发";--$commentcount;break;
  4.                                 case 3 :echo " 板凳";--$commentcount;break;
  5.                                 case 4 :echo " 地板";--$commentcount;break;
  6.                                 default:printf(' %1$s楼', --$commentcount);
  7.                             }
  8.                         }

修改成

  1. if($comorder == 'asc'){
  2.                         //在页面顶部显示 旧的 评论
  3.                         if(!$parent_id = $comment->comment_parent){
  4.                              switch ($commentcount){
  5.                                 case 0 :echo " 沙发";++$commentcount;break;
  6.                                 case 1 :echo " 板凳";++$commentcount;break;
  7.                                 case 2 :echo " 地板";++$commentcount;break;
  8.                                 default:printf(' %1$s楼', ++$commentcount);
  9.                             }
  10.                         }
  11.                     }else{
  12.                         //在页面顶部显示 新的 评论
  13.                         if(!$parent_id = $comment->comment_parent){
  14.                              switch ($commentcount){
  15.                                 case 2 :echo " 沙发";--$commentcount;break;
  16.                                 case 3 :echo " 板凳";--$commentcount;break;
  17.                                 case 4 :echo " 地板";--$commentcount;break;
  18.                                 default:printf(' %1$s楼', --$commentcount);
  19.                             }
  20.                         }
  21.                     }

即可。

PS:使用Nana主题的博主站长们,如果不想手动折腾,可以直接下载优化好的comment-template.php文件上传覆盖即可(懿古今其他主题也可以下载这个comment-template.php文件上传覆盖),或直接下载安装2016年12月24日重新分享的Nana V2.04版本。

第二种情况:顺序排列(即“旧的”评论在顶部)

优化WordPress评论楼层号,可同时支持顺序倒序排列 顺序排列(即“旧的”评论在顶部)

如上图所示,鸟哥的Ality主题的评论就是典型的倒序排列(个人感觉鸟哥的主题都是这个倒序排列),下面我们来把它优化成同时支持顺序或倒序排列而又不会造成楼层号错误。

具体修改步骤如下:

打开inc\functions\comment-template.php文件,首先找到以下代码(大约在14-21行)

  1. global $commentcount;
  2.     if(!$commentcount) {
  3.         if ( get_query_var('cpage') > 0 )
  4.         $page = get_query_var('cpage')-1;
  5.         else $page = get_query_var('cpage');
  6.         $cpp=get_option('comments_per_page');
  7.         $commentcount = $cpp * $page;
  8.     }

修改成

  1. // 楼层   
  2. $comorder =  get_option('comment_order');
  3. if($comorder == 'asc'){
  4.     //在页面顶部显示 旧的 评论
  5.     global $commentcount;
  6.     if(!$commentcount) {
  7.         if ( get_query_var('cpage') > 0 )
  8.             $page = get_query_var('cpage')-1;
  9.         else $page = get_query_var('cpage');
  10.             $cpp=get_option('comments_per_page');
  11.             $commentcount = $cpp * $page;
  12.     }
  13. }else{
  14.     //在页面顶部显示 新的 评论
  15.     global $commentcount,$wpdb$post;
  16.     if(!$commentcount) { //初始化楼层计数器
  17.         $comments = $wpdb->get_results("SELECT * FROM $wpdb->comments WHERE comment_post_ID = $post->ID AND comment_type = '' AND comment_approved = '1' AND !comment_parent");
  18.         $cnt = count($comments);//获取主评论总数量
  19.         $page = get_query_var('cpage');//获取当前评论列表页码
  20.         $cpp=get_option('comments_per_page');//获取每页评论显示数量
  21.         if (ceil($cnt/$cpp) == 1 || ($page>1 && $page == ceil($cnt/$cpp))) {
  22.             $commentcount = $cnt + 1;//如果评论只有1页或者是最后一页,初始值为主评论总数
  23.         } else {
  24.             $commentcount = $cpp * $page + 1;
  25.         }
  26.     }
  27. }

接着找到以下代码

  1. if(!$parent_id = $comment->comment_parent){
  2.     switch ($commentcount){
  3.         case 0 :echo " 沙发";++$commentcount;break;
  4.         case 1 :echo " 板凳";++$commentcount;break;
  5.         case 2 :echo " 地板";++$commentcount;break;
  6.         default:printf(' %1$s楼', ++$commentcount);
  7.     }
  8. }

修改成

  1. if($comorder == 'asc'){
  2.                         //在页面顶部显示 旧的 评论
  3.                         if(!$parent_id = $comment->comment_parent){
  4.                              switch ($commentcount){
  5.                                 case 0 :echo " 沙发";++$commentcount;break;
  6.                                 case 1 :echo " 板凳";++$commentcount;break;
  7.                                 case 2 :echo " 地板";++$commentcount;break;
  8.                                 default:printf(' %1$s楼', ++$commentcount);
  9.                             }
  10.                         }
  11.                     }else{
  12.                         //在页面顶部显示 新的 评论
  13.                         if(!$parent_id = $comment->comment_parent){
  14.                              switch ($commentcount){
  15.                                 case 2 :echo " 沙发";--$commentcount;break;
  16.                                 case 3 :echo " 板凳";--$commentcount;break;
  17.                                 case 4 :echo " 地板";--$commentcount;break;
  18.                                 default:printf(' %1$s楼', --$commentcount);
  19.                             }
  20.                         }
  21.                     }

即可。

结束语

这个办法其实就是通过一个判断语句,直接根据后台设置顶部显示的是“新的”评论还是“旧的”评论来判断楼层计数代码。如果大家所使用的主题有这种只能选择“新的”或“旧的”限制条件,不放按本文折腾一下,这样就可以随心所欲地切换“新的”或“旧的”评论了。

赞赏作者

如果文章对你有帮助,请赞赏支持作者继续创作!

文章标签: ,   ,  
原文地址:http://yigujin.cn/1064.html
温馨提示:文章内容仅代表作者个人观点,不代表boke112导航赞同其观点和对其真实性负责!
版权声明:本文为投稿文章,感谢 懿古今 的投稿,版权归原作者所有,欢迎分享本文,转载请保留出处!
WordPress免费响应式主题:Nana

发表评论


表情

  1. 堆爱博客
    堆爱博客 【农民】 @回复

    我的知更鸟照这样设置后 新评论在上面 结果全部显示0楼?

  2. 马行行个人博客
    马行行个人博客 【农民】 @回复

    内容清晰明了,很实用,不错呦!

  3. 靠谱学生兼职网
    靠谱学生兼职网 【市长】 @回复

    不错哦。

  4. Koolight
    Koolight 【省长】 @回复

    WP后台好像有设置选项啊。

    • boke112导航
      boke112导航【站长】2016-12-28 10:05  回复

      @Koolight[呲牙] WP后台可以设置“新的”评论或“旧的”评论在顶部,但是部分主体的楼层号没有兼容这两个,所以只能选一个,比如鸟哥的主题好像只能选“旧的”评论在顶部,要不然楼层号会不正确,你可以试试。

  5. 分钱榜
    分钱榜 【县长】 @回复

    很不错的教程,给力

  6. 靠谱学生兼职网
    靠谱学生兼职网 【市长】 @回复

    应该不用这么复杂的吧

  7. 明月登楼的博客
    明月登楼的博客 【总理】 @回复

    不错,过来点个赞支持一下先!

  8. 雅兮网
    雅兮网 【省长】 @回复

    理论上来讲是需要新的在上面的,无论是从原始的“盖楼”说法,还是评论的时效性,都应该把最新的内容显示在前面

  9. 西蒙宫
    西蒙宫 【村长】 @回复

    早!沙发成为垫底

  10. 阳谷赚钱网
    阳谷赚钱网 【农民】 @回复

    不错的啊

  11. 网际电脑
    网际电脑 【市长】 @回复

    这个方法不错

  12. 龙笑天
    龙笑天 【市长】 @回复

    再次马克一下~~ [呲牙]

  13. 金榜台博客
    金榜台博客 【市长】 @回复

    早,先来个沙发