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

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

即可。

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

鸟哥的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.                     }

即可。

结束语

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

相关推荐:

weinxin
99八十一微信公众号
扫一扫关注99八十一微信公众号,打开微信简简单单即可查看99八十一所有内容,更快捷更方便。
九哥

吐槽一下

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: