2011年04月24日 66条评论

读者墙: 数据库缓存方式版

这是根据 willin kan 最近的文章《另类的缓存方式》里面的方法修改的,有人需要并找我帮忙更改一下读者墙代码,于是就顺便贴出来。

其实按照 willin 的文章是很容易修改的,不过没接触过 php 的朋友还是会不知如何下手。

下面是根据我现在用的读者墙代码修改成,有需要的朋友可以直接拿去,我写成函数方式,方便使用

1. 在主题的 functions.php 加入如下读者墙函数代码

/* 读者墙函数 - 数据库缓存方式版 */
function mostactive_zww() {
	if(!$mostactive = get_option('mostactive')){
		global $wpdb;
		$limit_num = '16'; //显示数量
		$time = '1 MONTH'; //最近1个月内
		$noneurl = 'https://zww.me/'; //改为你自己博客地址
		$my_email = "'" . get_bloginfo ('admin_email') . "'"; //排除管理员评论
		$counts = $wpdb->get_results("
			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 $time )
			AND comment_author_email != $my_email
			AND post_password=''
			AND comment_approved='1'
			AND comment_type='') AS tempcmt	GROUP BY comment_author_email
			ORDER BY cnt DESC LIMIT $limit_num
		");
		$mostactive = '';
		if(empty($counts)) {
			$mostactive = '<li>none data.</li>';
		} else {
			foreach ($counts as $count) {
				$c_url = $count->comment_author_url;
				if ($c_url == '') $c_url = $noneurl;
				$title_alt = $count->comment_author . ' ('. $count->cnt. ' comments)';
				$mostactive .= '<li class="mostactive">' . '<a rel="external nofollow" href="'. $c_url . '" title="' .$title_alt
				. '">'.get_avatar($count->comment_author_email,$size='40',$default='').'</a></li>';
			}
		}
		update_option('mostactive', $mostactive);
	}
	echo $mostactive;
}
function clear_mostactive() {
  update_option('mostactive', ''); // 清空 mostactive
}
add_action('comment_post', 'clear_mostactive'); // 新评论发生时
add_action('edit_comment', 'clear_mostactive'); // 评论被编辑过

2. 在需要的地方调用此读者墙函数(如 sidebar.php)

<?php if(function_exists('mostactive_zww')) mostactive_zww(); ?>

ps:关于css样式参考以前我的文章《WordPress 免插件读者墙 willin 版本

完。

zww
or
oooo

“读者墙: 数据库缓存方式版”有66条评论

  1. 宝佑 says:

    我先在本地试试,我怕出错!

  2. 学习了,先在本地测试下

    1. zwwooooo says:

      @空中楼阁
      嗯嗯,比较保险

  3. 我现在还不敢缓存数据库

    1. zwwooooo says:

      @软件盒子
      缓存数据库?这只是把数据缓存到数据库的一个表值而已

  4. 西华秦 says:

    哈哈哈,看上你现在用的private主题、。。囧

    1. zwwooooo says:

      @西华秦
      其实和 zSnos2 差不多,只是多了自用ajax加载和头部的改变

  5. IM路人 says:

    这个的话,是不是一有评论就更新的~?

    1. zwwooooo says:

      @IM路人
      是的,不然数据就不准了

  6. towry says:

    :razz: 我还没接触PHP呢,呵呵。不过先测试一下。

    1. zwwooooo says:

      @towry
      可以本地测试下

  7. 无冷 says:

    php学的差,只会用, :evil:

    1. zwwooooo says:

      @无冷
      会用就很厉害了

  8. 西风 says:

    代码复制过去都不能用

    1. zwwooooo says:

      @西风
      要复制对地方哦

  9. liveme says:

    读者墙我现在不是很想折腾了。

    1. zwwooooo says:

      @liveme
      需要才折腾

  10. 浩子 says:

    好久换着用了

  11. shelwee says:

    本地试了下,为什么对于新发的评论,没立即在读者墙上显示头像?

    1. zwwooooo says:

      @shelwee
      新头像?你的意思是木有更新统计?按道理不会的,我这工作正常。

    2. zwwooooo says:

      @shelwee
      注意,不统计博主的头像的。

  12. dtdShan says:

    :?: 如果用了头像缓存还可以用吗

    1. zwwooooo says:

      @dtdShan
      这里是缓存“读者墙”的查询,而不是缓存图片

  13. 对于新的评论 不能立即显示出来 我测试了一下 一个评论 一下在评论5条 满足在评论墙上显示了 可是 依旧不显示在上面

    1. zwwooooo says:

      @所谓刚子
      没问题吧,看看是不是用了缓存插件之类的。

发表评论

昵称 *

网址

B em del U Link Code Quote