给WordPress中的留言加上楼层号的PHP代码实例
最近突然发现博客的评论楼层有点问题,之前一直设置的是“在每个页面顶部显示新的评论”,也就是所谓的倒序显示评论,但是主题只支持顺序的评论楼层好,于是楼层和楼层号之间对不上。搜了一下在zww.me发现有实现的代码,但是放到博客之后无法正常工作,比如限制分页显示为25条的时候,文章只有一条评论时也显示的25楼。折腾了一下搞定了,做个记录,也供大家参考。
在主题文件functions.php中找到$GLOBALS['comment']=$comment;在后面加上下面的代码:
/*主评论计数器*/
global$commentcount,$wpdb,$post;
if(!$commentcount){//初始化楼层计数器
if(get_option('comment_order')==='desc'){//倒序
$comments=$wpdb->get_results("SELECT*FROM$wpdb->commentsWHEREcomment_post_ID=$post->IDANDcomment_type=''ANDcomment_approved='1'AND!comment_parent");
$cnt=count($comments);//获取主评论总数量
$page=get_query_var('cpage');//获取当前评论列表页码
$cpp=get_option('comments_per_page');//获取每页评论显示数量
if(ceil($cnt/$cpp)==1||($page>1&&$page==ceil($cnt/$cpp))){
$commentcount=$cnt+1;//如果评论只有1页或者是最后一页,初始值为主评论总数
}else{
$commentcount=$cpp*$page+1;
}
}else{//顺序
$page=get_query_var('cpage')-1;
$cpp=get_option('comments_per_page');//获取每页评论数
$commentcount=$cpp*$page;
}
}
/*主评论计数器end*/
if(!$parent_id=$comment->comment_parent){
$commentcountText='<divclass="floor">';
if(get_option('comment_order')==='desc'){//倒序
$commentcountText.=--$commentcount.'楼';
}else{
switch($commentcount){
case0:
$commentcountText.='<span>沙发!</span>';++$commentcount;
break;
case1:
$commentcountText.='<span>板凳!</span>';++$commentcount;
break;
case2:
$commentcountText.='<span>地板!</span>';++$commentcount;
break;
default:
$commentcountText.=++$commentcount.'楼';
break;
}
}
$commentcountText.='</div">';
}
}
然后在合适的位置加上以下代码输出楼层号
<?phpecho$commentcountText;//主评论楼层号-byzwwooooo?>
修改之后的代码应该是这样的(以官方最新的wp_list_comments()回调函数代码为例):
<?php
functionmytheme_comment($comment,$args,$depth){
$GLOBALS['comment']=$comment;
/*主评论计数器byzwwoooooModifiedGimhoy(http://blog.gimhoy.com)*/
global$commentcount,$wpdb,$post;
if(!$commentcount){//初始化楼层计数器
if(get_option('comment_order')==='desc'){//倒序
$comments=$wpdb->get_results("SELECT*FROM$wpdb->commentsWHEREcomment_post_ID=$post->IDANDcomment_type=''ANDcomment_approved='1'AND!comment_parent");
$cnt=count($comments);//获取主评论总数量
$page=get_query_var('cpage');//获取当前评论列表页码
$cpp=get_option('comments_per_page');//获取每页评论显示数量
if(ceil($cnt/$cpp)==1||($page>1&&$page==ceil($cnt/$cpp))){
$commentcount=$cnt+1;//如果评论只有1页或者是最后一页,初始值为主评论总数
}else{
$commentcount=$cpp*$page+1;
}
}else{//顺序
$page=get_query_var('cpage')-1;
$cpp=get_option('comments_per_page');//获取每页评论数
$commentcount=$cpp*$page;
}
}
/*主评论计数器end*/
if(!$parent_id=$comment->comment_parent){
$commentcountText='<divclass="floor">';
if(get_option('comment_order')==='desc'){//倒序
$commentcountText.=--$commentcount.'楼';
}else{
switch($commentcount){
case0:
$commentcountText.='<span>沙发!</span>';++$commentcount;
break;
case1:
$commentcountText.='<span>板凳!</span>';++$commentcount;
break;
case2:
$commentcountText.='<span>地板!</span>';++$commentcount;
break;
default:
$commentcountText.=++$commentcount.'楼';
break;
}
}
$commentcountText.='</div">';
}
}
extract($args,EXTR_SKIP);
if('div'==$args['style']){
$tag='div';
$add_below='comment';
}else{
$tag='li';
$add_below='div-comment';
}
?>
<<?phpecho$tag?><?phpcomment_class(empty($args['has_children'])?'':'parent')?>id="comment-<?phpcomment_ID()?>">
<?phpif('div'!=$args['style']):?>
<divid="div-comment-<?phpcomment_ID()?>"class="comment-body">
<?phpendif;?>
<divclass="comment-authorvcard">
<?phpif($args['avatar_size']!=0)echoget_avatar($comment,$args['avatar_size']);?>
<?phpprintf(__('<citeclass="fn">%s</cite><spanclass="says">says:</span>'),get_comment_author_link())?>
</div>
<?phpif($comment->comment_approved=='0'):?>
<emclass="comment-awaiting-moderation"><?php_e('Yourcommentisawaitingmoderation.')?></em>
<br/>
<?phpendif;?>
<divclass="comment-metacommentmetadata"><ahref="<?phpechohtmlspecialchars(get_comment_link($comment->comment_ID))?>">
<?php
/*translators:1:date,2:time*/
printf(__('%1$sat%2$s'),get_comment_date(),get_comment_time())?></a><?phpedit_comment_link(__('(Edit)'),'','');
?>
</div>
<?phpcomment_text()?>
<divclass="reply">
<?phpcomment_reply_link(array_merge($args,array('add_below'=>$add_below,'depth'=>$depth,'max_depth'=>$args['max_depth'])))?>
</div>
<?phpecho$commentcountText;//主评论楼层号-byzwwooooo?>
<?phpif('div'!=$args['style']):?>
</div>
<?phpendif;?>
<?php
}
样式就自己添加吧~~