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

 懿古今   2016-12-24 08:08:50 发布  技术文档

不知道大家是否有关注过,部分集成有评论楼层号的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.                     }

即可。

结束语

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

本文地址:https://www.yigujin.cn/1064.html

你可能感兴趣的文章

文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 懿古今 所有,欢迎分享本文,转载请保留出处!发布此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请发邮件至[email protected],确认后马上更正、删除,谢谢!

发表评论

  1. 李主席
    李主席 @回复

    来抢个沙发

  2. Koolight
    Koolight @回复

    节日快乐!

    • 懿古今
      懿古今2016-12-24 23:05  回复

      @Koolight[礼物] 谢谢祝福,也祝你平安夜快乐,记得吃苹果哦

  3. 让我上沙发
    让我上沙发 @回复

    老古这么快就行动了,赞一个~

    好像现在还不是倒序,在页面添加倒序按钮
    需要的就按一下?

    • 懿古今
      懿古今2016-12-24 23:04  回复

      @让我上沙发分享的Nana主题以实现倒序或顺序,我这个站点目前是顺序排列。其实又有多少人会认真去看评论呢?所以目前懒得折腾这个按钮,以后再看情况吧

  4. 木庄博客
    木庄博客 @回复

    [强] [强] [强]

  5. 姜辰
    姜辰 @回复

    给力~~

  6. 阿里云计算
    阿里云计算 @回复

    评论框图片如何实现?

  7. 魔羯
    魔羯 @回复

    不错的功能!

  8. 明月登楼的博客
    明月登楼的博客 @回复

    不错,学习了!支持一下!

  9. 龙笑天
    龙笑天 @回复

    NB啊,这么小的问题都被你发现并解决了~~

    • 懿古今
      懿古今2016-12-26 21:30  回复

      @龙笑天[偷笑] 有了这个功能就可以随心所欲地更改讨论顺序了,一会旧的,一会新的 [呲牙]

  10. 动感单车
    动感单车 @回复

    [微笑] 一则,我喜欢“新的”评论在顶部的显示方式,二则,目前我已经不再修改自己的博客了,感觉好累人!

    • 懿古今
      懿古今2016-12-26 21:26  回复

      @动感单车[呲牙] 我已经换成“新的”评论在顶部,有了这个代码之后,后台直接选择就行,挺方便的

  11. 明月登楼的博客
    明月登楼的博客 @回复

    不错,这个可以搞搞!