北极寒流 » 网络资源 » wordpress最新评论缓存版+标签云缓存版 - 2012.02.19

wordpress最新评论缓存版+标签云缓存版

wordpress最新评论缓存版以及标签云缓存版代码分享。在wordpress中,有很多数据查询是非常占用资源的,特别是例如标签云(tag)或者wordpress最新评论的代码,如果你的服务器不是很强大的话,过多的数据查询会严重影响网站速度,这也是为什么目前wordpress缓存插件大行其道的原因,毕竟大家都希望自己的博客能快点,再快一点。

不过,如果你RP不好,遇到你的空间服务器关掉了 fopen() 功能,就会导致你的网站开不了磁盘缓存,下面就给大家分享一个另类的缓存方法-数据库缓存

不做太多介绍了,直接上代码吧。

wordpress最新评论缓存版

<h3><?php _e('Recent Comments'); ?></h3>
<ul class="recentcomments">
<?php
if (!$rc_comments = get_option('rc_comments')) { // 如果在 option 沒有 rc_comments 才執行
global $wpdb;
$my_email = get_bloginfo ('admin_email');
$rc_comms = $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
    ");
$rc_comments = '';
foreach ($rc_comms as $rc_comm) {
$a = get_option('siteurl')."/wp-content/avatar/". md5(strtolower($rc_comm->comment_author_email)) .'.jpg'; // 頭像緩存用的
$rc_comments .= "<li><img src='" . $a . "' alt='' title='" . $rc_comm->comment_author
. "' class='avatar' /><a href='"
. htmlspecialchars(get_comment_link( $rc_comm->comment_ID, array('type' => 'comment')))
. "' title='on " . $rc_comm->post_title . "'>" . strip_tags($rc_comm->comment_content)
. "</a></li>\n";
}
$rc_comments = convert_smilies($rc_comments);
    update_option('rc_comments', $rc_comments); // 將結果存入 option 的 rc_comments
}
echo $rc_comments; // 顯示
?>
</ul>

把上面的代码替换你模板的最新评论代码(一般是在sidebar.php中),

主要改变是在 option 若取得 rc_comments 的时候, 它是直接显示.
在没有 rc_comments 的时候才会执行原有的计算, 将整段 Html 结果存入 option, 再显示.

然后再在functions.php加入下面的代码

function clear_rc_comments() {
  update_option('rc_comments', ''); // 清空 rc_comments
}
add_action('comment_post', 'clear_rc_comments'); // 新評論發生時
add_action('edit_comment', 'clear_rc_comments'); // 評論被編輯過

这段是执行清空 rc_comments, 让 rc_comments 可以更新。从上面的代码可以看出,当有新评论或者当你编辑评论时都会执行清理动作,所以当你想手动清除缓存的话, 可在后台编辑评论, 什么都不改就按下更新评论, 缓存就清除了.

一般博客, 访问的次数远远大於评论的次数, 若用这种方式缓存, 可大大让网页加速, 就算服务器不让你用磁盘缓存都没关系.
已经用了磁盘缓存的童鞋, 就没必要再用了, 若还想用也没关系, 因为它们并不冲突.

wordpress标签云缓存版

<?php wp_tag_cloud('smallest=10&largest=25&number=48&orderby=name') ?>

把你的原始wordpress标签云代码(一般是在sidebar.php中,格式类似上面那行)用下面那段替换

<?php

if (!$rc_tags = get_option('rc_tags')) {
$rc_tags = wp_tag_cloud('smallest=10&largest=25&number=48&orderby=count&order=RAND');
update_option('rc_tags', $rc_tags); // 将结果存入 option 的 rc_tag_cloud
}
echo $rc_tags;

?>

然后在functions.php加入下面的代码

function clear_rc_tags() {
update_option('rc_tags', ''); // 清空 rc_comments
}
add_action('save_post', 'clear_rc_tags'); // 关于Post的任何操作

这样就可以实现wordpress标签云的缓存了。

上述代码部分来自http://kan.willin.org/?p=1345,而本人正在用是把他们都写成函数了,下面是我的代码(加在functions.php)

/* 评论截断 */
function cut_str($string, $sublen, $start = 0, $code = 'UTF-8')
{
if($code == 'UTF-8')
{
$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
preg_match_all($pa, $string, $t_string);
if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
return join('', array_slice($t_string[0], $start, $sublen));
}
else
{
$start = $start*2;
$sublen = $sublen*2;
$strlen = strlen($string);
$tmpstr = '';
for($i=0; $i<$strlen; $i++)
{
if($i>=$start && $i<($start+$sublen))
{
if(ord(substr($string, $i, 1))>129) $tmpstr.= substr($string, $i, 2);
else $tmpstr.= substr($string, $i, 1);
}
if(ord(substr($string, $i, 1))>129) $i++;
}
if(strlen($tmpstr)<$strlen ) $tmpstr.= "...";
return $tmpstr;
}
}
//最新评论缓存版
function comments_epinv() {
if (!$rc_comments = get_option('rc_comments')) { //如果在 option 沒有 rc_comments 才執行
    global $wpdb;
    //$my_email = get_bloginfo ('admin_email');//不想显示博主评论就打开此行
    $rc_comms = $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
    ");
    $rc_comments = '';
    foreach ($rc_comms as $rc_comm) {
      $rc_comments .= "\n<li>".strip_tags($rc_comm->comment_author).":" . " <a href='"
        . htmlspecialchars(get_comment_link( $rc_comm->comment_ID, array('type' => 'comment')))
        . "' title='on " . $rc_comm->post_title . "'>" . cut_str(strip_tags($rc_comm->comment_content),30)
        . "</a></li>";
    }
    $rc_comments = convert_smilies($rc_comments);
    update_option('rc_comments', $rc_comments); // 將結果存入 option 的 rc_comments
}
echo $rc_comments;
}
function clear_rc_comments() {
  update_option('rc_comments', ''); // 清空 rc_comments
}
add_action('comment_post', 'clear_rc_comments'); // 新評論發生時
add_action('edit_comment', 'clear_rc_comments'); // 評論被編輯過
//标签云缓存版
function tags_epinv() {
if (!$rc_tags = get_option('rc_tags')) {
$rc_tags = wp_tag_cloud('smallest=10&largest=25&number=48&orderby=count&order=RAND');
update_option('rc_tags', $rc_tags); // 将结果存入 option 的 rc_tag_cloud
}
echo $rc_tags;
}
function clear_rc_tags() {
update_option('rc_tags', '');
}
add_action('save_post', 'clear_rc_tags'); // 关于Post的任何操作

然后在你需要调用的地方通过

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

最新评论

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

标签云

这样调用即可,效果可见亿品设计网站

19

wordpress最新评论缓存版+标签云缓存版

分享到:

最受欢迎的