WordPress 免插件版侧边栏读者墙

林继 WordPress 3,415 共写了740个字 (2010-12-24 17:17:56) 没有评论 打印 扫描二维码 百度已收录

读者墙功能最近好像比较火,一方面可以鼓励访客留言,另一方面也方便博主回访。我最初是在林木木那里看到的这个功能、接着又分别在 whispererzwwoOoOo 那里看到了这个效果,有些心动,之后又在六维博客中再次看到了免插件实现读者墙的功能,于是惹起了我折腾 WordPress 的热血沸腾。

用插件实现的方法我就不多介绍了,我就爱玩代码:

一、函数部分:

将以下代码复制到 functions.php 中:

  1. $identity="comment_author";
  2. $passwordpost = " AND post_password=''";
  3. $userexclude = " AND user_id='0' and comment_author != '万戈'";
  4. $approved = " AND comment_approved='1'";
  5. $shownumber = 24;
  6. $counts = $wpdb->get_results("SELECT COUNT(" . $identity . ") AS cnt, comment_author, comment_author_url,comment_author_email FROM (SELECT * FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->posts.ID=$wpdb->comments.comment_post_ID) WHERE MONTH(comment_date)=MONTH(now()) and YEAR(comment_date)=YEAR(now())" .
  7. $userexclude . $passwordpost . $approved . ") AS tempcmt GROUP BY " . $identity . " ORDER BY cnt DESC LIMIT " . $shownumber);

二、引用部分:

  将以下代码复制到 sidebar.php 中:

  1. <div class="widget">
  2. <h3>本月水王</h3>
  3. <ul class="ffox_most_active">
  4. <?php if ( $counts ) : foreach ($counts as $count) :
  5. echo  '<li>' . '<a href="'. $count->comment_author_url . '" title="' . $count->comment_author . ' ('. $count->cnt . '评论)">' .get_avatar($count->comment_author_email,32).'</a></li>';
  6. endforeach; endif;
  7. ?>
  8. </ul>
  9. </div>

  三、样式部分:

  以下样式仅作参考。

  1. .sidebar .widget .ffox_most_active li {
  2. list-style:none;
  3. float:left;
  4. border:none;
  5. padding-left:0;
  6. width:41px;
  7. background:none;
  8. }
  9. .sidebar .widget .ffox_most_active img.avatar {
  10. width:32px;
  11. height:32px;
  12. }

  就这样,免插件版的读者墙就实现了,效果可以见我的侧边栏(除了首页侧边栏)。其中代码和样式主要参考自 zwwoOoOo 的http://zww.me/archives/24671。

免插件读者墙完整精确免修改版代码如下:

  1. <h2>Most Active Friends</h2> //标题,可根据需要增加样式
  2. <ul>
  3. <?php
  4. $my_email = "'" . get_bloginfo ('admin_email') . "'";
  5. //获取管理员邮箱
  6. $counts = $wpdb->get_results("
  7. SELECT COUNT(comment_author) AS cnt, comment_author, comment_author_url, comment_author_email FROM (SELECT * FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->posts.ID=$wpdb->comments.comment_post_ID) WHERE comment_date > date_sub( NOW(), INTERVAL 1 MONTH )
  8. //1 MONTH就是一个月之内的排行
  9. AND user_id='0'
  10. AND comment_author_email != $my_email //根据邮箱判断,输出非博主的数据.
  11. AND post_password=''
  12. AND comment_approved='1'
  13. AND comment_type='') AS tempcmt
  14. AS tempcmt GROUP BY comment_author_email
  15. //按同一作者邮箱把评论数量归类相加
  16. ORDER BY cnt
  17. DESC LIMIT 12"); //最后一个数字12就是显示头像的数量。
  18. foreach ($counts as $count) {
  19. $c_url = $count->comment_author_url;
  20. $mostactive .= '<li>' . '<a href="'. $c_url . '" title="' . $count->comment_author . ' ('. $count->cnt . 'comments)">' . get_avatar($count->comment_author_email, 40) . '</a></li>';
  21. }</div>
  22. echo $mostactive;
  23. ?>
  24. </ul>

上面代码中标注出了INTERVAL 1 MONTH )
//1 MONTH就是一个月之内的排行
这个可以修改成1 YEAR ,意思是一年内的排行,然后将DESC LIMIT 12 中的12改成100,就变成我现在友情链接页面的1年内评论排行的读者墙了.
如果修改成1 DAY 或者 24 HOUR 就会显示1天内或24小时内留言的朋友的头像。
根据评论的最后时间排列的.
这就需要将上面代码中ORDER BY cnt
改为 ORDER BY comment_date_gmt
然后删除掉DESC LIMIT 12,因为我们并不知道24小时内有多少人会留言.
所以就不需要限定显示的数量了.

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

< >