Single

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

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

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

具体修改步骤如下:

打开incfunctionscomment-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版本。

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

具体修改步骤如下:

打开incfunctionscomment-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.                     }

即可。

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