RSS

10个手动修改WordPress评论的技巧

第一次翻译这么专业这么长的一篇帖子,投稿到Webbeta上了,由于西小西做站写代码相当的业余,错误难免,请拿斧子使劲儿砍,哈哈~

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

1. 加入动作链接的评论

Screenshot

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

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

  1. function delete_comment_link($id) {
  2. if (current_user_can(‘edit_post’)) {
  3. echo ‘| <a href=”‘.admin_url(“comment.php?action=cdc&c=$id“).'”>del</a> ‘;
  4. echo ‘| <a href=”‘.admin_url(“comment.php?action=cdc&dt=spam&c=$id“).'”>spam</a>’;
  5. }
  6. }

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

  1. delete_comment_link(get_comment_ID());

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

文章来源:

2. 区分引用评论

Screenshot

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

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

  1. foreach ($comments as $comment) : ?>
  2. // Comments are displayed here
  3. endforeach;

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

  1. <ul class=“commentlist”>
  2. <?php //Displays comments only
  3. foreach ($comments as $comment) : ?>
  4. <?php $comment_type = get_comment_type(); ?>
  5. <?php if($comment_type == ‘comment’) { ?>
  6. <li>//Comment code goes here</li>
  7. <?php }
  8. endforeach;
  9. </ul>
  10. <ul>
  11. <?php //Displays trackbacks only
  12. foreach ($comments as $comment) : ?>
  13. <?php $comment_type = get_comment_type(); ?>
  14. <?php if($comment_type != ‘comment’) { ?>
  15. <li><?php comment_author_link() ?></li>
  16. <?php }
  17. endforeach;
  18. </ul>

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

文章来源:

3. 去除评论里的超链接

Screenshot

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

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

  1. function plc_comment_post( $incoming_comment ) {
  2. $incoming_comment[‘comment_content’] =
  3. htmlspecialchars($incoming_comment[‘comment_content’]);
  4. $incoming_comment[‘comment_content’] = str_replace(“‘”, ‘&apos;‘, $incoming_comment[‘comment_content’] );
  5. return( $incoming_comment );
  6. }
  7. function plc_comment_display( $comment_to_display ) {
  8. $comment_to_display = str_replace( ‘&apos;’, “‘”, $comment_to_display );
  9. return $comment_to_display;
  10. }
  11. add_filter(‘preprocess_comment’, ‘plc_comment_post’, , 1);
  12. add_filter(‘comment_text’, ‘plc_comment_display’, , 1);
  13. add_filter(‘comment_text_rss’, ‘plc_comment_display’, , 1);
  14. add_filter(‘comment_excerpt’, ‘plc_comment_display’, , 1);

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

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

文章来源:

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

Screenshot

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

解决方案。

  1. 首先下载函数 here
  2. 下载只有解压到硬盘,然后打开twittar.php 文件。
  3. 选择全部代码并复制,粘贴到博客的functions.php文件里。
  4. 最后打开comments.php文件并查找评论 comments loop。
  5. 把下列代码粘贴到评论循环里comments loop:
    1. <?php twittar(’45’, ‘default.png’, ‘#e9e9e9’, ‘twitavatars’, 1, ‘G’); ?>

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

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

文章来源:

5. 区分作者的评论风格

Screenshot

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

解决方案。

  1. 打开comments.php文件并且找到如下语句:
    1. <?php foreach comment as $comment) { ?>
  2. 在代码的下一行,插入如下代码:
    1. <?php
    2. $isByAuthor = false;
    3. if($comment->comment_author_email == get_the_author_email()) {
    4. $isByAuthor = true;
    5. }
    6. ?>
  3. 保存成功后,找到这行关于评论的代码(不同主题可能有所变化):
    1. <li class=“<?php echo $oddcomment; ?>” id=“comment-<?php comment_ID() ?>”>
  4. 如果是作者的评论我们就输出作者的评论级别:
    1. <li class=”<?php echo $oddcomment; ?> <?php if($isByAuthor ) {
    2. echo ‘authorcomment’;} ?>” id=”comment-<?php comment_ID() ?>”>
  5. 最后我们为作者的评论建立一个CSS分类,打开style.css文件并插入如下代码。选择你自己的颜色来替代例子中的颜色。
    1. .authorcomment{
    2. color:#fff;
    3. font-weight:bold;
    4. background:#068;
    5. }

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

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

文章来源:

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

Screenshot

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

解决方案。

  1. <?php
  2. $count_posts = wp_count_posts();
  3. $posts = $count_posts->publish;
  4. $count_comments = get_comment_count();
  5. $comments = $count_comments[‘approved’];
  6. echo“There’s a total of “.$comments.
  7. ” comments on my blog, with an average “.
  8. round($comments/$posts).” comments per post.”;
  9. ?>

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

文章来源:

7. 显示最新评论数

Screenshot

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

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

  1. <?php
  2. $pre_HTML =“”;
  3. $post_HTML =“”;
  4. global $wpdb;
  5. $sql =“SELECT DISTINCT ID, post_title, post_password, comment_ID,
  6. comment_post_ID, comment_author, comment_date_gmt,
  7. comment_approved, comment_type,comment_author_url,
  8. 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 =
  9. ” AND post_password = ” ORDER BY comment_date_gmt DESC LIMIT 10″;
  10. $comments = $wpdb->get_results($sql);
  11. $output = $pre_HTML;
  12. $output .= “\n<ul>”;
  13. foreach ($comments as $comment) {
  14. $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>”;
  15. }
  16. $output .= “\n</ul>”;
  17. $output .= $post_HTML;
  18. echo $output;
  19. ?>

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

文章来源:

8. 轻松阻止垃圾评论

Screenshot

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

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

  1. function check_referrer() {
  2. if (!isset($_SERVER[‘HTTP_REFERER’]) || $_SERVER[‘HTTP_REFERER’] == “”) {
  3. wp_die( __(‘Please enable referrers in your browser, or,
  4. if you\’re a spammer, bugger off!’) );
  5. }
  6. }
  7. add_action(‘check_comment_flood’, ‘check_referrer’);

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

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

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

文章来源:

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

Screenshot

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

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

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

  1. <?php
  2. add_filter(‘comments_template’, ‘legacy_comments’);
  3. function legacy_comments($file) {
  4. if(!function_exists(‘wp_list_comments’)) : // WP 2.7-only check
  5. $file = TEMPLATEPATH.‘/legacy.comments.php’;
  6. endif;
  7. return $file;
  8. }
  9. ?>

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

文章来源:

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

Screenshot

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

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

  1. <ul>
  2. <?php
  3. $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”);
  4. foreach ($result as $topten) {
  5. $postid = $topten->ID;
  6. $title = $topten->post_title;
  7. $commentcount = $topten->comment_count;
  8. if ($commentcount != 0) {
  9. ?>
  10. <li><a href=“<?php echo get_permalink($postid); ?>”><?php echo $title ?></a></li>
  11. <?php }
  12. }
  13. ?>
  14. </ul>

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

This post was written by:

- who has written 435 posts on 西小西|xixiaoxi.com.


Contact the author 转贴到开心网

14 Comments For This Post

  1. LAONB Says:

    删除按钮的确有创意,国内博客我还没见过有添加这个功能的。

    [回复]

    西小西 回复:

    呵呵,那你加个撒~

    [回复]

    LAONB 回复:

    我想先换了评论样式在手工添加回复,引用,还有删除。哈哈,那就强大了。

    [回复]

    西小西 回复:

    反正我一个都没试过,嘿嘿

    [回复]

  2. juller Says:

    不错,哈哈。就是看不到图片啊。怎么回事?

    [回复]

    西小西 回复:

    现在好了~

    [回复]

  3. 卢松松 Says:

    确实没看到图片啊!

    [回复]

    西小西 回复:

    现在看,哈哈~

    [回复]

  4. JiaCheng Says:

    这个帖子很强悍!我顶~

    [回复]

    西小西 回复:

    嘿嘿,谢谢啦~

    [回复]

  5. 蛋王 Says:

    哇,你太强大了。。。

    [回复]

    西小西 回复:

    翻译的╮(╯▽╰)╭

    [回复]

  6. 老时 Says:

    辛苦了,虽然我用不上哈

    [回复]

    西小西 回复:

    呵呵,常来~

    [回复]

  7. kramon Says:

    小西开始往技术方面发展了?

    [回复]

    西小西 回复:

    没有,俺技术起点忒低啦~

    [回复]

  8. bolo Says:

    嗯,这个要学习一下

    [回复]

    西小西 回复:

    呵呵,好好学习~

    [回复]

  9. bolo Says:

    再次拜读,这篇文章我收藏了,哈哈

    [回复]

    西小西 回复:

    哈哈,多谢捧场啊~技术这东西不值钱哎~反正我翻译的很业余,嘿嘿

    [回复]

  10. twj Says:

    看不懂
    纯顶!

    [回复]

  11. 牛歌 Says:

    学习了!很棒的指导。

    [回复]

    西小西 回复:

    咳咳咳~

    [回复]

  12. 野果子 Says:

    😉 非常不错,寻找好久,评论越改越糟,得好好弄弄。

    [回复]

  13. 丕子 Says:

    有用 顶啊 :kiss:

    [回复]

  14. seven Says:

    博主挺厉害的! :clap:
    想请教一下,我想要评论留言时不需要填邮箱地址都可以评论留言,这应该怎样做呢?
    博主教一下吧,谢谢~!

    [回复]

Leave a Reply