在WordPress中如何配置Turnstile

在 WordPress 中配置 Cloudflare Turnstile 是一个比传统 reCAPTCHA 更优雅、对用户更友好的解决方案。它无需用户进行任何交互(如点击),或者仅进行简单的复选框确认,能有效阻止垃圾信息的同时提升用户体验。

以下是两种主要的配置方法:使用插件(推荐给大多数用户)和手动代码集成(适合开发者)。

Cloudflare Turnstile

方法一:使用插件(*简单、*推荐)

这是*适合非开发者的方法。目前有几个优秀的插件可以让你在几分钟内完成配置。

推荐插件:

  1. Simple Cloudflare Turnstile: 轻量级、专注于此功能的插件。
  2. Advanced Google reCAPTCHA & Cloudflare Turnstile: 同时支持 reCAPTCHA 和 Turnstile。
  3. WP Turnstile: 另一个专门为 Turnstile 设计的插件。

这里以 Simple Cloudflare Turnstile 为例,因为它非常直观:

步骤 1:获取 Turnstile Keys

  1. 拥有一个 Cloudflare 账户(即使你的域名不在 Cloudflare 托管,也可以使用)。
  2. 登录 Cloudflare 仪表板,在侧边栏找到 “安全性” > “Turnstile”
  3. 点击 “添加站点”
  4. 填写你的网站信息:
    • 网站名称: 你的 WordPress 网站名。
    • 网站域名: 你的网站域名(例如 example.com)。
    • 小部件模式: 推荐选择 “非交互式” 以获得*佳用户体验。
  5. 点击 “创建”
  6. 成功后,你会得到一对密钥:站点密钥 和 秘密密钥。复制并保存它们。

步骤 2:安装并配置插件

  1. 在 WordPress 后台,进入 “插件” > “安装插件”
  2. 搜索 “Simple Cloudflare Turnstile” 并安装、激活。
  3. 进入 “设置” > “Cloudflare Turnstile”
  4. 将之前获取的 站点密钥 和 秘密密钥 分别填入对应字段。
  5. 在 “启用位置” 部分,选择你希望显示 Turnstile 的表单,例如:
    • 登录表单
    • 注册表单
    • 忘记密码表单
    • 评论表单
    • WooCommerce 结账/登录/注册(如果适用)
  6. 保存更改。

完成!现在你选择的表单就会受到 Turnstile 的保护,而用户几乎感知不到它的存在。

方法二:手动代码集成(适合开发者)

如果你喜欢完全控制,或者你的主题/表单插件不被上述插件支持,可以手动添加代码。

步骤 1:获取 Turnstile Keys

同方法一的步骤 1,从 Cloudflare 获取你的 站点密钥 和 秘密密钥

步骤 2:将 Turnstile 脚本和前端部件添加到表单

你需要将 Turnstile 的 JavaScript 脚本和占位符 div 添加到你的表单模板中。

将以下代码添加到你的主题的 functions.php 文件中,或者一个自定义功能插件中:

/**
 * 在网站前台加载 Cloudflare Turnstile 脚本
 */
function enqueue_turnstile_script() {
    // 仅在需要显示 Turnstile 的页面加载,如登录页、文章页(评论)
    if is_page('login') || is_single() ) {
        wp_enqueue_script('cloudflare-turnstile', 'https://challenges.cloudflare.com/turnstile/v0/api.js', array(), null, true);
    }
}
add_action('wp_enqueue_scripts', 'enqueue_turnstile_script');

/**
 * 在登录表单后添加 Turnstile 部件
 */
function add_turnstile_to_login_form() {
    $site_key = '你的_站点_密钥'; // 替换为你的真实站点密钥
    echo '<div class="cf-turnstile" data-sitekey="' . esc_attr($site_key) . '" data-theme="light"></div>';
}
add_action('login_form', 'add_turnstile_to_login_form');

/**
 * 在评论表单后添加 Turnstile 部件
 */
function add_turnstile_to_comment_form() {
    $site_key = '你的_站点_密钥'; // 替换为你的真实站点密钥
    echo '<div class="cf-turnstile" data-sitekey="' . esc_attr($site_key) . '" data-theme="light"></div>';
}
add_action('comment_form_after_fields', 'add_turnstile_to_comment_form');
// 对于已登录用户,评论表单结构不同
add_action('comment_form_logged_in_after', 'add_turnstile_to_comment_form');

步骤 3:服务器端验证

这是*关键的一步。当表单提交时,你必须将 Turnstile 返回的令牌发送到 Cloudflare 进行验证。

以下是一个处理登录表单验证的例子:

/**
 * 验证 Turnstile 响应
 */
function verify_turnstile_response($response_token) {
    $secret_key = '你的_秘密_密钥'; // 替换为你的真实秘密密钥

    $verify_url = 'https://challenges.cloudflare.com/turnstile/v0/siteverify';
    $post_data = array(
        'secret' => $secret_key,
        'response' => $response_token,
        'remoteip' => $_SERVER['REMOTE_ADDR']
    );

    $response = wp_remote_post($verify_url, array(
        'body' => $post_data,
    ));

    $result = json_decode(wp_remote_retrieve_body($response), true);
    return $result['success']; // 返回 true 或 false
}

/**
 * 验证登录表单的 Turnstile
 */
function verify_login_turnstile($user, $username, $password) {
    // 检查是否提交了 turnstile 响应
    if (!isset($_POST['cf-turnstile-response'])) {
        return new WP_Error('authentication_failed', __('<strong>错误</strong>: 请完成人机验证。'));
    }

    $token = sanitize_text_field($_POST['cf-turnstile-response']);
    $verification = verify_turnstile_response($token);

    if (!$verification) {
        return new WP_Error('authentication_failed', __('<strong>错误</strong>: Turnstile 验证失败,请重试。'));
    }

    return $user;
}
// 在 WordPress 认证过程中加入我们的验证
add_filter('wp_authenticate_user', 'verify_login_turnstile', 10, 3);

对于评论表单,你可以使用 preprocess_comment 钩子进行类似的验证。

总结与*佳实践

特性使用插件手动集成
难度简单,无需编码复杂,需要开发知识
灵活性中等,取决于插件选项,可以完全自定义
维护由插件作者更新自行负责更新
推荐用于绝大多数网站管理员、博主开发者、有特殊定制需求的网站

*佳实践:

  • 保护密钥: 永远不要将你的秘密密钥暴露在前端代码中。
  • 测试: 在 Cloudflare Turnstile 的设置中,你可以将域名添加到 “允许列表”,并为测试环境创建一个 “测试” 模式的站点,使用固定的测试密钥,这样验证总是成功或失败,便于开发。
  • 备用方案: 考虑在 Turnstile 脚本加载失败时,提供一个备用的验证机制(虽然很少需要)。
  • 样式: Turnstile 小部件可以自适应容器大小,你也可以通过 CSS 自定义其外观以匹配你的主题。

按照以上步骤,你就可以成功地在 WordPress 中配置 Cloudflare Turnstile,有效地保护你的网站表单免受垃圾邮件和机器人的侵扰。

滚动至顶部
扫描微信二维码联系我们 关闭