这里不是说的的使用缓存插件之类的东西,是关于如何利用wordpress自带的缓存体系。很多时候,比如输出最新评论、相关文章、读者墙等地方,基本是不需要实时更新的,然而每次打开页面就会去数据库里查询一次。用伪静态化当然可以解决这些问题,不过对于流量不大的博客就没必要了。wordpress自带有缓存体系,关键的函数你可以在wp-includes/cache.php或 Codex里查找到所有的函数。

你可以使用下列函数来实现添加缓存。

wp_cache_add($key, $data, $flag = ”, $expire = 0)

相反的,要删除缓存数据可以通过下面的方法实现。

wp_cache_delete($id, $flag = ”)

提取缓存数据:

wp_cache_get($id, $flag = ”)

替换缓存数据:

wp_cache_replace($key, $data, $flag = ”, $expire = 0)

 

举个例子,如果想输出最新评论,可以先从缓存里读取需要输出的HTML,如果没有,请求一次,成功后加入缓存,当然时间可以控制。

我知道有很多最新评论,相关文章免插件输出的方法,原理都一样,可以自行改改,贴个我用的:

<?php

/**
 * get recent comments
 * @param unknown_type $args
 * @return unknown_type
 */
function WinyskyRecentcomments($args='number=5&status=approve'){

	$cacheID = md5($args);
    //有缓存就直接输出
	if($output = wp_cache_get('recentComments_'.$cacheID, 'Winysky')){
		echo $output;
		return;
	}

	//$rcms = get_comments($args);
global $wpdb;

	$my_email = "'" . get_bloginfo ('admin_email') . "'";
//自动获取博主邮箱
$rcms = $wpdb->get_results("
SELECT ID, post_title, comment_ID, comment_author, comment_author_email, comment_content
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 = ''
AND comment_author_email != $my_email

ORDER BY comment_date_gmt
DESC LIMIT 10

");

	//print_r($rcms);return;
	if(empty($rcms)){
		_e('没有数据');
		return;
	}
	//历遍数据
	$output = '';
	foreach( $rcms as $rcm ){
			$author = $rcm->comment_author;
			//if($author =='admin'){continue;}
      		$content = WinyskyStriptags( $rcm->comment_content);
		$the_title = get_the_title($rcm->comment_post_ID);
		$s_excerpt = convert_smilies( WinyskySubstr( $content, 200 ) );
		$contents = '<span class=\'recentcommentslink_author\'>' . $author . '</span> <span class=\'recentcommentslink_on\'>on</span> <span class=\'recentcommentslink_title\'>' . $the_title . '</span><div class=\'recentcommentslink_excerpt\'>' . get_avatar($rcm->comment_author_email, 64). $s_excerpt . '</div>';

			$output .=  '<li><div id="C_' . $rcm->comment_ID . '_d" style="display:none">' . $contents . '</div>' . '<a id="C_' . $rcm->comment_ID . '" class="recentcommentslink" href="' . get_permalink($rcm->comment_post_ID) . '#comment-' . $rcm->comment_ID . '" >' . get_avatar($rcm->comment_author_email, 32) . '</a></li>';

	}
	//输出后加入缓存
	wp_cache_add('recentComments_'.$cacheID. $output, 'Winysky');
	echo $output;
}

ps:顺便show下独特的最新评论样式,左侧的头像鼠标移上去看看,:-D

  1. 阿修 (2010.07.03 at 20:15) ☆沙发

    沙发~~

    • winy() (2010.07.03 at 20:18)

      @阿修 定时自动发的,你也能沙发 :|

  2. 阿修 (2010.07.03 at 20:18) 板凳

    这个我还得测试测试哈。
    话说边栏最新评论鼠标移动的话会闪……

    • winy() (2010.07.03 at 20:57)

      @阿修 哦,就chrome下有这问题,fx,op,ie测试都正常,算了懒得管了,继续弄下一个主题 :evil:

  3. 蛋卷 (2010.07.03 at 21:54) 地板

    新一代沙发帝

  4. 万戈 (2010.07.03 at 22:07) 4楼

    原生的,我喜欢!

  5. mice (2010.07.03 at 22:21) 5楼

    嘿嘿 左边那个效果 是JQ的吧,我也有用 不过我是用来显示QQ秀的 可以去我站 看看效果噢..膜拜大师..

    • winy() (2010.07.03 at 23:30)

      @mice 不错的网站~

    • mice (2010.07.03 at 23:31)

      @winy 大师终于回复我了。。来了几次都没跟我说话。。。

    • winy() (2010.07.03 at 23:36)

      @mice 我不是什么大师,我是cp(复制粘贴)党&&伪技术爱好 :evil:
      不是每条留言都回复,因为保证左面那个留言头像不能全是我的 :grin:
      来的都会回访的~

    • mice (2010.07.03 at 23:45)

      @winy 可以过滤下嘛 嘿嘿.

    • winy() (2010.07.03 at 23:55)

      @mice 还是不过滤好看

  6. BoKeam (2010.07.04 at 07:35) 6楼

    这个我暂时用的插件

  7. A.shun (2010.07.04 at 16:10) 7楼

    用wiilin的缓存路过

    • winy() (2010.07.04 at 16:38)

      @A.shun 那是头像吧,我说的是数据库缓存。。

    • A.shun (2010.07.04 at 18:41)

      @winy 。。眼神不好。。
      现在数据库缓存用着 DB Cache Reloaded。。效果一样么

    • winy() (2010.07.04 at 18:43)

      @A.shun 缓存类的思路都差不多吧,这个是尽量用wp自带的功能,适合折腾的朋友 :|

  8. Dianso (2010.07.04 at 22:41) 8楼

    鼠标点上去闪的很厉害,点到中间才显示吧

    • winy() (2010.07.04 at 22:44)

      @Dianso 只有 Chrome是这样 :arrow: 不想改了,等下一个主题了

评论分页: 1 2

发布评论

邮箱(必填)

换个背景