Jun 27

由于 Web/HTTP 的流行(Web 基于 HTTP, 超文本传输协议), 人们开发了大量的 Web 开发库, 这使得, 提交一个表单发表评论是一件非常简单的事. 如果使用脚本语言, 甚至能仅用 3, 5 行代码便能解决.

博客防垃圾评论, 是每一个博主十分关心了头疼的问题, 特别是使用了 Wordpress 这类十分流行的开源博客软件, 那么被垃圾评论盯上的机率就更甚了. 同时, 这些软件也提供了防垃圾评论(anti-spam)插件, 用于解决这个问题.

1. 垃圾评论的分类

垃圾评论根据产生方式在可以分为两大类: 人工垃圾评论, 机器人垃圾评论. Continue reading »

Written by ideawu at 2009-06-27 09:33:30 | tags:

May 03

虽然akismet识别垃圾评论的准确率很高, 但对于我来说, 每天看到垃圾评论队列里有那么多垃圾评论, 还是很不爽. 眼不见为净. 于是自己写了个Wordpress插件, 直接丢弃垃圾评论.

Wordpress只有comment_post, 但没有pre_comment_post事件, 在评论被保存之前触发. 我只好自己加上了. 所以修改了wp-comments-post.php文件.

// 就是这一行, ideawu.net
do_action('pre_comment_post', $commentdata);

$comment_id = wp_new_comment( $commentdata );

$comment = get_comment($comment_id);

插件很简单, 就是利用comment_post事件加入一个隐藏字段, 该字段的值通过客户端JavaScript代码来设置. 提交后和服务器端的值比较, 如果不相同, 说明用户未开启JavaScript, 被认为是垃圾评论. 评论机器人一般不会支持JavaScript.

有需要的朋友给我留言, 我发给你. 欢迎有心的朋友按第一条评论的格式回复进行测试!

Written by ideawu at 2009-05-03 20:54:28 | tags: ,

Apr 30

从第一次想法到现在好几年, 今天终于把博客迁移到Wordpress上, 欢迎订阅. 近4年来不使用Wordpress, 而是使用自己写的博客程序, 原来有几个: 1. 自己写的程序更快. 2. 自己写的程序用起来更顺手.

因为自己比较熟悉PHP+MySQL, 所以数据迁移很顺利, 原来ideablog中的文章, 评论和留言都迁移过来了, 没有丢失. 而且通过简单的文本替换, 适应了Wordpress的文章显示格式, 保持了原有的文章格式. 当然会有部分格式有问题, 但还未发现.

新博客刚上线没几分钟, 就收到垃圾评论(spam). 还不如我的ideablog, 只用简单的客户端JavaScript代码就可以实现防垃圾评论, 因为spam机器人不会去执行javascript.

欢迎订阅RSS.

Written by ideawu at 2009-04-30 20:10:14 | tags:

Mar 12

将下面的函数放到你的主题的 functions.php 文件中:

function theme_echo_pagenavi(){
    global $wp_query;
    global $request, $posts_per_page, $wpdb, $paged;
    $maxButtonCount = 9; //显示的最多链接数目

    $current_page = $paged;

    $current_page = $paged;
    if(empty($current_page)) {
        $current_page = 1;
    }

    $numposts = $wp_query->found_posts;
    $max_page = $wp_query->max_num_pages;

    $start = max(1, $current_page - intval($maxButtonCount/2));
    $end = min($start + $maxButtonCount - 1, $max_page);
    $start = max(1, $end - $maxButtonCount + 1);

    if($current_page <= 1){
        echo "<span>|<</span>";
        echo "<span><<</span>";
    }else{
        echo '<a href="'.get_pagenum_link().'"><span>|<</span></a>';
        echo '<a href="'.get_pagenum_link($current_page-1).'"><span><<</span></a>';
    }
    for($i=$start; $i<=$end; $i++){
        if($i == $current_page) {
            echo "<span class=\"page_num on\">$i</span>";
        } else {
            echo '<a href="'.get_pagenum_link($i).'"><span class="page_num">'.$i.'</span></a>';
        }
    }
    if($current_page >= $max_page){
        echo "<span>>></span>";
        echo "<span>>|</span> ";
    }else{
        echo '<a href="'.get_pagenum_link($current_page+1).'"><span>>></span></a>';
        echo '<a href="'.get_pagenum_link($max_page).'"><span>>|</span></a>';
    }

    echo " {$current_page}/{$max_page}页, {$numposts}条记录.";
}

在主题的 index.php 文件中这样引用:

<?php theme_echo_pagenavi(); ?>

Written by ideawu at 2009-03-12 14:47:01 | tags: