SK 2 与 cos-html-cache 共存之道

发表于 2007年六月5日
分类为 WordPress | 标签 , | 13 条评论

这几天在忙一个事情,那就是将本站的 home、page 和 post 页面静态化了,全部生成html文件,这样访问时可以尽可能减少数据库访问,加快访问速度,这对我用的这种空间还是有很大意义的。

静态化主要采用了 cosβ 编写的 cos-html-cache 插件。由于根据作者的建议,更改了永久链接结构,为了以前的地址能保持继续访问,又安装了 Dean’s Permalinks Migration,用来转换链接。关于这两个插件的相关问题,可以分别访问各自的官网寻找。

下面谈谈我遇到的问题。本 BLOG 虽然其貌不扬,知名度不高,但始终有一定量的 spam 攻击,虽然不多,但是很讨厌。以前用 WP 官方的 Akismet 可以很好的防御这个问题,但是自从其服务器被墙之后,就经常不正常工作。后来就换上了目前使用的 Spam Karma 2 插件,效果是很不错的。

但是这个效果不错的 SK2 似乎和 cos-html-cache 不和,SK2 通过评论后,cos-html-cache 不启动重建缓存。这个问题很郁闷啊,不能有评论我就手动重建啊,SK2 又不能关,只有动手改改了~这里说明下我的 PHP 水平是自己看了几天编程核心思想的书,然后受不了扔了,所以等级可想而知,如有各种离奇错误,还望指正。

首先研究了下 cos-html-cache 的代码,发现它在评论通过后更新缓存是靠 add_action 实现的,那么既然 SK2 通过评论后没有更新缓存,说明 SK2 通过评论后没有执行与 add_action 的钩子(hook)对应的 do_action(我的想法就是这样,并且根据这个思路解决了问题)。既然这样,我们只要在 SK2 通过评论的代码后加上一个 do_action 就应该可以解决问题。于是又着手研究 SK2 的代码,找到三处代码实现通过评论。下面说说修改方式:

首先编辑 spam_karma_2_plugin.php 文件,找到:

elseif ( get_settings('comments_notify'))
{
wp_notify_postauthor($comment_ID, $sk2_core->cur_comment->type);
}

这一好像是直接通过的评论不做任何处理,修改为:

else
{
if ( get_settings('comments_notify'))
{
wp_notify_postauthor($comment_ID, $sk2_core->cur_comment->type);
}
global $wpdb;

$post_id = (int)$wpdb->get_var("SELECT comment_post_ID FROM $wpdb->comments WHERE comment_ID='$comment_ID' LIMIT 1");
do_action('comment_approved', $post_id);
}

可以看到,这里在通过后,获取通过评论所属文章的ID,平且 do_action。这里没有采用 cos-html-cache 处理评论时的 action(edit_post),主要是怕影响到其他由这个 action 激发的插件。

再找到:

if ($cur_section == 'spam')
{
$sk2_core->cur_comment->set_karma(15, 'web_UI', __("Manually recovered comment.", 'sk2'));
do_action('wp_set_comment_status', $sk2_core->cur_comment->ID);
}

这部分是手动将 spam 恢复为正常评论的代码,替换为:

if ($cur_section == 'spam')
{
$sk2_core->cur_comment->set_karma(15, 'web_UI', __("Manually recovered comment.", 'sk2'));
do_action('wp_set_comment_status', $sk2_core->cur_comment->ID);
global $wpdb;

$post_id = (int)$wpdb->get_var("SELECT comment_post_ID FROM $wpdb->comments WHERE comment_ID='$sk2_core->cur_comment->ID' LIMIT 1");
do_action('comment_approved', $post_id);
}

到此 spam_karma_2_plugin.php 编辑完毕,保存,再开启 sk2_core_class.php,查找:

if ($this->cur_comment->approved == '1')
{
echo __("Thank you. Your comment has been approved.", 'sk2');
if ( get_settings('comments_notify') )
wp_notify_postauthor($this->cur_comment->ID, $this->cur_comment->type);
//TODO redirect to comment page...
}

这一段应该是给第二次机会后的处理,相应的替换为:

if ($this->cur_comment->approved == '1')
{
echo __("Thank you. Your comment has been approved.", 'sk2');
global $wpdb;

$post_id = (int)$wpdb->get_var("SELECT comment_post_ID FROM $wpdb->comments WHERE comment_ID='$this->cur_comment->ID' LIMIT 1");
do_action('comment_approved', $post_id);
if ( get_settings('comments_notify') )
wp_notify_postauthor($this->cur_comment->ID, $this->cur_comment->type);
//TODO redirect to comment page...
}

至此 SK2 的改动完毕。前面已经说了,我写的 do_action 没有采用 cos-html-cache 处理评论时的 action,于是还要小改动一下 cos-html-cache 插件,开启 cos-html-cache.php,找到:

add_action('edit_post', 'htmlCreator');
add_action('edit_post', 'createIndexHTML');

在其下添加:

add_action('comment_approved', 'htmlCreator');
add_action('comment_approved', 'createIndexHTML');

到这里,所有的修改完毕,发布评论并被 SK2 通过后,应该就可以更新缓存了。

这次修改的思路就是在 SK2 里合适位置添加 do_action,使其在通过评论后触发 cos-html-cache 更新缓存。这种改法似乎可以用在更多场合,比如 FlickrRSS 图片更新后,亦可以通过类似的修改实现重新缓存首页什么的。

评论

13 Responses to “SK 2 与 cos-html-cache 共存之道”

  1. bt4wang 说:

    自己沙发下~

  2. bt4wang 说:

    试一试ajax comments是否可用……

  3. bt4wang 说:

    貌似是可以的,还就没有忙技术了,累……

  4. bt4wang 说:

    貌似不即时显示,郁闷……

  5. bt4wang 说:

    貌似是我看错了,呵呵……

  6. cosbeta 说:

    不错,够勤快的,K2的处理也太不科学了

  7. bt4wang 说:

    没有用过K2,不知道是什么情况……不行就手工加do_action……

  8. bt4wang 说:

    刚才突然发现又不抓IP了,安家的缓存技术……
    Ajax Comment里加了安家提供的代码就好了……

  9. chenxiuhan 说:

    老王哦,好像你这边改版了,所以找了一番才找进来。发现你还是在做一些积极有意义的事,很好很好了,值得学习~~~

  10. 莎莎 说:

    HELLO…我正在下你的YAIBA..超级开心的,找了N久啦..

    我想问11集以后的有没有字幕的? 是什么字幕?

    一定要回复我哦..期待中..也可以加我QQ112390972..
    你的留言本用不了啊..所以写在这~

  11. [...] 在他写的《SK2 与 cos-html-cache 共存之道》一文中给出了解决问题的思路和方法,即:在 SK2 [...]

  12. [...] 其一:浪人的窝:SK 2 与 cos-html-cache 共存之道 [...]

  13. login 说:

    Go there guys buy prescription medications that are used to relax your body, relax your muscles.

发表评论




  • 关于

    这里是浪人的窝。这篇关于已经几百年没更新过了。 浪人在南京生活了20多年,现在上海混,没房没车没钱。浪人曾经在这里记录各种各样的心情,有快乐同样有悲伤。所曾经是因为以后不打算这么干了,以后主要走土鳖技术路线,力争做到低技术、低水平、后知后觉。

  • 分类目录

  • 日历

    2010年三月
    « 二    
    1234567
    891011121314
    15161718192021
    22232425262728
    293031