这里不是说的的使用缓存插件之类的东西,是关于如何利用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
沙发~~
@阿修 定时自动发的,你也能沙发
这个我还得测试测试哈。
话说边栏最新评论鼠标移动的话会闪……
@阿修 哦,就chrome下有这问题,fx,op,ie测试都正常,算了懒得管了,继续弄下一个主题
新一代沙发帝
@蛋卷 低调
原生的,我喜欢!
@万戈 伪技术拿出来show
嘿嘿 左边那个效果 是JQ的吧,我也有用 不过我是用来显示QQ秀的 可以去我站 看看效果噢..膜拜大师..
@mice 不错的网站~
@winy 大师终于回复我了。。来了几次都没跟我说话。。。
@mice 我不是什么大师,我是cp(复制粘贴)党&&伪技术爱好

不是每条留言都回复,因为保证左面那个留言头像不能全是我的
来的都会回访的~
@winy 可以过滤下嘛 嘿嘿.
@mice 还是不过滤好看
这个我暂时用的插件
用wiilin的缓存路过
@A.shun 那是头像吧,我说的是数据库缓存。。
@winy 。。眼神不好。。
现在数据库缓存用着 DB Cache Reloaded。。效果一样么
@A.shun 缓存类的思路都差不多吧,这个是尽量用wp自带的功能,适合折腾的朋友
鼠标点上去闪的很厉害,点到中间才显示吧
@Dianso 只有 Chrome是这样
不想改了,等下一个主题了