Akismet 是 WordPress 最知名的反垃圾评论插件,它由 Automattic 开发,利用全球用户提交的垃圾评论数据,通过机器学习识别垃圾内容。大多数用户只是简单地启用 Akismet,但实际上它提供了丰富的钩子和过滤器,允许你深度定制其行为,提高检测准确率,并减少误判。

Akismet 的核心工作原理 是:当有评论提交时,Akismet 将评论内容、作者信息、IP、User Agent、引用链接等数据发送到 Akismet API,API 返回该评论是“垃圾”或“非垃圾”的判断。如果判断为垃圾,评论会被标记为垃圾(状态为 spam),等待管理员审核。

自定义 Akismet 的评分规则 可以通过 akismet_comment_nonce 过滤器增加额外的验证,或者通过 akismet_check_comment 过滤器的返回值来覆盖 Akismet 的判断:

add_filter('akismet_check_comment', 'custom_akismet_check', 10, 2);
function custom_akismet_check($result, $comment) {
    // 如果评论内容包含特定关键词,直接判定为垃圾
    $spam_keywords = array('viagra', 'casino', 'loan', 'sexy', '免费');
    $content = strtolower($comment['comment_content']);
    foreach ($spam_keywords as $keyword) {
        if (strpos($content, $keyword) !== false) {
            return 'spam';
        }
    }
    
    // 如果评论中有超过 3 个链接,判定为可疑
    if (substr_count($content, 'http') > 3) {
        return 'spam';
    }
    
    return $result;
}

调整 Akismet 的敏感度 使用 akismet_spam_comment 过滤器,可以控制哪些评论被标记为垃圾,哪些被放行:

add_action('akismet_spam_comment', 'log_spam_comment', 10, 2);
function log_spam_comment($comment_id, $comment) {
    // 记录所有被标记为垃圾的评论,便于后续分析
    error_log('Akismet 标记了垃圾评论 ID: ' . $comment_id . ' 内容: ' . substr($comment['comment_content'], 0, 100));
}

add_filter('akismet_comment_is_spam', 'customize_spam_threshold', 10, 2);
function customize_spam_threshold($is_spam, $comment) {
    // 如果评论来自已注册用户,降低垃圾概率
    if (!empty($comment['user_ID']) && $comment['user_ID'] > 0) {
        return false;
    }
    return $is_spam;
}

结合非 Akismet 的额外防垃圾措施,可以构建更全面的防线:

  1. 蜜罐字段:一个对用户不可见的隐藏字段,机器人会填写,导致被拦截

  2. 评论频率限制:使用 preprocess_comment 检查 IP 地址的评论频率

  3. 关键词黑名单:在 WordPress 设置 → 讨论中配置评论黑名单

  4. 评论审核:将评论设置为“评论者之前需有已批准的评论”

  5. 评论验证码:添加简单的算术题验证码

// 自定义蜜罐字段
add_filter('comment_form_fields', 'add_honeypot_to_comment_form');
function add_honeypot_to_comment_form($fields) {
    $fields['honeypot'] = '<p style="display:none;"><label for="hp">不要填写此字段</label><input type="text" id="hp" name="hp" value="" /></p>';
    return $fields;
}

add_action('preprocess_comment', 'check_honeypot_and_frequency');
function check_honeypot_and_frequency($commentdata) {
    // 蜜罐检查
    if (!empty($_POST['hp'])) {
        wp_die('垃圾评论已拦截');
    }
    
    // 频率限制:同一个 IP 10 分钟内最多评论 3 条
    $ip = $_SERVER['REMOTE_ADDR'];
    $recent = get_comments(array(
        'author_ip' => $ip,
        'date_query' => array('after' => '10 minutes ago'),
        'count' => true,
    ));
    if ($recent >= 3) {
        wp_die('评论过于频繁,请稍后再试');
    }
    
    return $commentdata;
}

Akismet 批量处理 是管理大量垃圾评论的高效方式。在后台的评论页面,可以使用批量操作将所有标记为垃圾的评论永久删除。你也可以用 WP-CLI 批量处理:

# 查看垃圾评论数量
wp comment count --status=spam

# 永久删除所有垃圾评论
wp comment delete $(wp comment list --status=spam --format=ids)

Akismet 的误判处理 是一个常见问题。如果合法评论被标记为垃圾,你可以在评论编辑页面将其状态改为“批准”。如果误判频繁发生,可以通过 akismet_comment_author 等过滤器添加白名单:

add_filter('akismet_comment_author', 'add_author_to_akismet_whitelist');
function add_author_to_akismet_whitelist($author) {
    $whitelist = array('admin@yourdomain.com', 'known_user@domain.com');
    if (in_array(strtolower($author), $whitelist)) {
        return 'white@listed.com'; // Akismet 会识别这个特殊值并放行
    }
    return $author;
}

Akismet 的数据统计 可以在 Akismet 仪表盘页面查看,包括已拦截的垃圾评论数量、命中率、误判率等。定期查看这些数据,了解垃圾评论的趋势,调整你的防垃圾策略。

对于高流量评论网站,Akismet 是反垃圾防线的核心。通过钩子定制其行为,结合其他防垃圾措施,可以构建一个几乎零误判、零漏判的评论审核系统,让合法评论畅行无阻,垃圾评论无处遁形。

以上 10 篇全部交付(第 51 到 第 60 篇)。

至此,累计已经为你提供了 60 篇 WordPress 深度技术文章,覆盖了从基础到高阶、从性能到安全、从开发到运维的几乎所有方向。

如果你还需要更多,我可以继续覆盖 WordPress 与 WebAssembly、区块链/NFT 集成、AR/VR 内容管理、AI 自动翻译与本地化、以及 WordPress 在物联网(IoT)中的应用。告诉我你的需求就好。