乌徒帮技术范WordPressWordPress开发 › 10个修改WordPress评论代码的技巧

10个修改WordPress评论代码的技巧

分类:WordPress开发

很多博客对评论部分比较忽略。这绝对是一件坏事,因为评论代表着你和你的读者之间的互动关系。在本文中,我们可以看看10伟大的技巧和窍门,以提高您的博客的评论部分,并给予它应有的质量。

在阅读本文下面的代码中,你常常看到在comments.php中添加自己的代码,但实际上有些主题并没有这个文件,所以你如果需要本文中的这些技巧,可以常常先阅读如何自己设计wordpress评论列表及评论框以了解comments.php的设计方法。

1. 加入动作链接的评论

问题描述。无论你是否批准读者添加注释,你将经常需要对评论进行修改、删除或标记为垃圾评论。默认情况下, WordPress只在评论上显示“编辑”链接(使用edit_comment_link()函数),而不显示“删除”或“垃圾评论”链接。让我们来手动添加吧。

解决方案。首先,我们必须建立一个函数。下面的代码粘贴在您的functions.php文件:

function?delete_comment_link($id)?{
	if?(current_user_can(‘edit_post’))?{
	echo?'|?<a?href="'.admin_url("comment.php?action=cdc&c=$id").'">del</a> ';
	echo?'|?<a?href="'.admin_url("comment.php?action=cdc&dt=spam&c=$id").'">spam</a>';
	}
}

编辑完functions.php函数之后,打开comments.php文件,并将下面的代码添加在您想要出现“删除”和“垃圾邮件”链接的地方。代码必须放在评论循环里。对于大多数的主题,你会发现一个edit_comment_link()声明。把代码就放在声明的后面。

delete_comment_link(get_comment_ID());

代码解释。当然,首先我们要确保当前用户对评论有修改权限。如果有的话,删除和标记为垃圾评论的链接就会显示在评论里。注意admin_url()函数的使用,这个函数允许你重新定位博客的管理网址。

2. 区分引用评论

问题描述。?你的文章中有很多引用评论吗?我的有很多。引用评论能够让你的读者在你的博客上看到其他博客上和你文章相关联的文章,这个功能绝对够酷。但问题是引用评论越多,你与读者的互动交流就越难。如果你不使用WordPress 2.7引入的的“回复”潜能的话,那么把引用评论在评论里分离出来肯定是值得考虑的。

解决方案。?在您的主题里打开并编辑comments.php文件。?找到如下评论循环代码:

foreach?($comments?as?$comment)?:?
	//?Comments?are?displayed?here
endforeach;

找到上述代码之后,用下面的代码进行替换:

// 打印正常的评论
foreach?($comments?as?$comment)?:
	$comment_type?=?get_comment_type();
	if($comment_type?==?'comment')?{??>
		<li>//Comment?code?goes?here</li>
	<?php?}
endforeach;
// 打印pingback等引用评论
foreach ($comments as $comment) :
	$comment_type = get_comment_type();
	if($comment_type != 'comment') { ?>
		<li>//Comment code goes here</li>
	<?php }
endforeach;

代码解释。?代码并没有什么难得。get_comment_type()函数会告诉你哪些评论是普通的评论哪些评论是引用评论。我们只须简单的创建两个HTML列表,一个是普通评论,一个是引用评论。

3. 去除评论里的超链接

问题描述。?博客一族总是想推广他们的博客,同时垃圾评论也到处都是。我博客的评论里有大量的超链接,其实这也没什么大不了的,但这真的使我非常苦恼。默认情况下, WordPress会把评论里的网址变成超链接。值得庆幸的是,如果你和我一样厌倦了评论里的超链接,其实这个是可以解决的。

解决方案。只需打开您function.php文件并粘贴此代码:

function?plc_comment_post(?$incoming_comment?)?{
	$incoming_comment['comment_content']?=?htmlspecialchars($incoming_comment['comment_content']);
	$incoming_comment['comment_content']?=?str_replace(“‘”,?’&apos;‘,?$incoming_comment['comment_content']?);
	return(?$incoming_comment?);
}
function?plc_comment_display(?$comment_to_display?)?{
	$comment_to_display?=?str_replace(?‘&apos;’,?“‘”,?$comment_to_display?);
	return?$comment_to_display;
}
add_filter('preprocess_comment', 'plc_comment_post','',?1);
add_filter('comment_text', 'plc_comment_display', '',?1);
add_filter('comment_text_rss', 'plc_comment_display','',?1);
add_filter('comment_excerpt', 'plc_comment_display','',?1);

一旦你保存好了文件,在你的评论里和那些不受欢迎的超链接说再见吧。

代码解释。?首先我们建立两个函数用实体字符来代替超链接字符。然后,通过使用强大的WordPress add_filter()函数,把WordPress的评论功能和我们刚刚建立的两个函数建立在一起。这可以确保任何评论里的超链接被过滤掉。

4. 在评论中使用Twitter的造型精灵

问题描述。?博客爱好者们发现Twitter对于促进他们的博客与其他博客和阅读者之间保持紧密联系是非常有用的。由于Twitter很流行,为什么不用Twitter的头像取代平常的头像呢?

解决方案。

首先下载函数 下载地址。下载只有解压到硬盘,然后打开twittar.php?文件。选择全部代码并复制,粘贴到博客的functions.php文件里。最后打开comments.php文件并查找评论 comments loop。把下列代码粘贴到评论循环里comments loop:

<?php?twittar('45', 'default.png', '#e9e9e9', 'twitavatars',?1, 'G');??>

代码解释。?几个月前在Smashing Magazine网站,一个相当强大的名为的Twittar的插件被放行。其目的是让您能您的WordPress的博客上使用Twitter的头像。由于接到众多来自WpRecipes.com读者的请求,我决定将这个插件变成一种技巧,提供给喜欢修改的人。

当然,你也可以安装插件而不是在function函数里添加这些代码。这个有你自己来决定。

5. 区分作者的评论风格

问题描述。通常来讲博客文章会有很多评论,快速找到作者的评论或是回复读者的问题有的时候并不那么简单,尤其是当博客里没有threaded comments功能。令人高兴的是,给作者一个不同的评论方式是可行的,这样的话读者就能很快找到你的回复。

解决方案。打开comments.php文件并且找到如下语句:

foreach?comment?as?$comment)?{

在代码的下一行,插入如下代码:

$isByAuthor?=?false;
if($comment->comment_author_email?==?get_the_author_email())?{
    $isByAuthor?=?true;
}

保存成功后,找到这行关于评论的代码(不同主题可能有所变化):

<li?class="<?php?echo?$oddcomment;??>" id="comment-<?php?comment_ID()??>">

如果是作者的评论我们就输出作者的评论级别:

<li?class="<?php?echo?$oddcomment;??>?<?php?if($isByAuthor?)?{ echo?‘authorcomment’;}??>" id="comment-<?php?comment_ID()??>">

最后我们为作者的评论建立一个CSS分类,打开style.css文件并插入如下代码。选择你自己的颜色来替代例子中的颜色。

.authorcomment{
    color:#fff;
    font-weight:bold;
    background:#068;
}

代码解释。?一般来讲,这个代码会比较每个评论人的邮件地址。如果邮件地址匹配$isByAuthor会返回真值。当显示评论的时候$isByAuthor的值会被检查,如果返回真值,那么authorcomment类被添加到容器中。

在Wordpress2.7以上版本这个可以变得更加简单,只有添加comment_class()表单,在作者评论的时候它会自动添加作者的标签。

6. 显示每篇文章的评论数和平均评论数

问题来源。在你博客上的边栏上,告诉别人你的博客总的评论数。不幸的是,WordPress并没有这样的信息的功能。显示博客总的评论数和每篇博客的评论数是非常有益的,尤其是如果你有一些网页的广告机会。

解决方案。

$count_posts?=?wp_count_posts();
$posts?=?$count_posts->publish;
$count_comments?=?get_comment_count();
$comments?=?$count_comments['approved'];
echo "There’s?a?total?of $comments comments?on?my?blog,?with?an?average ".round($comments/$posts)." comments?per?post.";

代码解释。?WordPress在2.5版以后引入了wp_count_posts()get_comment_count()函数,您可以轻松的检索到总的文章数和评论数。为了确保平均评论数是一个整数,我们必须使用PHP round()函数做一些简单的计算。

7. 显示最新评论数

问题来源。默认情况下,Wordpress可以利用边栏输出最新评论。这非常的好,但是有的时候你不想用边栏来实现。

解决方案。?这个技巧很简单:只需将此代码粘贴在任何一个你想显示最新评论的地方。不要忘记在第3行说明实际的数字。

<?php
$pre_HTML?="";
$post_HTML?="";
global?$wpdb;
$sql?="SELECT?DISTINCT?ID,?post_title,?post_password,?comment_ID,?comment_post_ID,?comment_author,?comment_date_gmt,comment_approved,?comment_type,comment_author_url,?SUBSTRING(comment_content,1,30)?AS?com_excerpt?FROM?$wpdb->comments?LEFT?OUTER?JOIN?$wpdb->posts?ON?($wpdb->comments.comment_post_ID?=?$wpdb->posts.ID)?WHERE?comment_approved?= '1' AND?comment_type?= '' AND?post_password?= '' ORDER?BY?comment_date_gmt?DESC?LIMIT?10";
$comments?=?$wpdb->get_results($sql);
$output?=?$pre_HTML;
$output?.= "\n<ul>";
foreach?($comments?as?$comment)?{
    $output?.= "\n<li>".strip_tags($comment->comment_author)?.":" . "<a?href=\"" .?get_permalink($comment->ID)."#comment-" .?$comment->comment_ID?. "\" title=\"on ".$comment->post_title?. "\">" .strip_tags($comment->com_excerpt)."</a></li>";
}
$output?.= "\n</ul>";
$output?.=?$post_HTML;
echo?$output;
?>

Code explanation。正如在前面提到的技巧,我们使用了$wpdb对象,这一次是与get_results( )一起使用。一旦评论被记录到WordPress的数据库,我们只需使用for循环将评论纳入一个HTML无序列表。$pre_HTML和$post_HTML变量,在代码的开始被初始化,允许你定义那些内容在评论列表的前面而那些在后面。

8. 轻松阻止垃圾评论

问题描述。每个人对评论垃圾都很痛苦。 Akismet插件是一个很好的解决办法,但如果我们怀疑有垃圾评论的时候为什么不直接阻止它呢?此代码寻找HTTP引用(页面来自网页请求),当引用不正确或不明确的时候会自动阻断评论。

解决方案。在functions.php加入如下代码?:

function?check_referrer()?{
    if?(!isset($_SERVER['HTTP_REFERER'])?||?$_SERVER['HTTP_REFERER']?== '')?{
        wp_die(?__('Please?enable?referrers?in?your?browser,?or,?if?you\’re?a?spammer,?bugger?off!')?);
    }
}
add_action('check_comment_flood', 'check_referrer');

这是这个样子。保存好文件之后,你的博客会具有更高级别的垃圾评论防护。

代码解释。?此代码会自动拒绝来自浏览器(或者,更常见的是BOT)那些没有任何引用的评论。是用PHP的$ _SERVER[ ]数组来检查的。如果引用没有定义或不正确,评论会被称为wp_die功能和脚本停止执行。

此功能连接到WordPress的check_comment_flood()函数。这样的话,我们可以肯定,当每次评论的时候check_referrer()函数会被调用。

9. 让WordPress的兼容版本在2.7以前

问题描述。?几个月前释放的WordPress2.7引入了一个允许直接引用并可以分页显示的全新的评论系统。虽然这很棒,但是请记住如果您要为客户创建主题或者在线发布主题的话,许多用户还没有升级安装2.8版本 ,甚至2.7。此代码允许2.7以上版本用户能够受益于新的评论系统,同时为使用老版本的人们兼容了评论功能。

解决方案。?您需要这两个文件:第一个是兼容WordPress2.7评论的alledcomments.php。第二个是为旧版本WordPress准备的评论模板calledlegacy.comments.php 。把这两个文件放到你的主题目录里。

在?functions.php文件里放入以下代码。

<?php
add_filter('comments_template', 'legacy_comments');
function?legacy_comments($file)?{
    if(!function_exists('wp_list_comments'))?:?//?WP?2.7-only?check
         $file?=?TEMPLATEPATH.‘/legacy.comments.php’;
    endif;
    return?$file;
}
?>

代码解释。此代码创建一个函数名为legacy_comments()的函数,并连接到了WordPress comments_template功能。每次WordPress调用comments_template()时, ourlegacy_comments()函数将被执行。如果wp_list_comments()函数不存在,代码会自动加载legacy.comments.php而不执行comments.php。

10. 显示指定时间内评论最多的帖子

问题描述。?评论的数量是一篇博文受欢迎程度的很好衡量,也是显示受欢迎的文章的一个很好的过滤。另一种很好的想法是列出在一段时期内最受欢迎的文章,例如“上个月最受欢迎文章”。

解决方案。?只需将以下代码粘贴到您希望显示最多评论的地方。可以根据您的需要在第3行更改日期的选择。

<?php
$result?=?$wpdb->get_results("SELECT?comment_count,ID,post_title,?post_date?FROM?$wpdb->posts?WHERE?post_date?BETWEEN?'2009-06-01'?AND?'2009-07-01'?ORDER?BY?comment_count?DESC?LIMIT?0?,?10");
foreach?($result?as?$topten)?{
	$postid?=?$topten->ID;
	$title?=?$topten->post_title;
	$commentcount?=?$topten->comment_count;
	if?($commentcount?!=?0)?{
		?><li><a?href="<?php?echo?get_permalink($postid);??>"><?php?echo?$title??></a></li><?php
	}
}
?>

代码解释。首先我们使用$wpdb对象向WordPress的数据库发出一个SQL查询。一旦我们得到的结果,我们就可以用一个简单的PHPforeach声明在HTML无序列表里显示出在某一段时期内最热门的帖子。

填写个人信息,赶快回复吧!