wp-digital / wp-recaptcha
帮助使用 Google reCAPTCHA v3 或 Cloudflare Turnstile 保护网站。
Requires
- php: >=7.4
- ext-json: *
- composer/installers: ~1.0
- php-di/php-di: ^7.0
- vectorface/whip: ^0.4.0
Requires (Dev)
- innocode-digital/php-cs: ^1.0
- squizlabs/php_codesniffer: ^3.7
This package is auto-updated.
Last update: 2024-08-29 14:32:50 UTC
README
描述
帮助使用 Google reCAPTCHA v3 或 Cloudflare Turnstile 保护网站。此插件默认提供登录和找回密码表单的保护,但可以通过遵循此文档将其添加到任何表单。
要求
- PHP 7.4+
- WordPress 6.2+(您可以尝试使用旧版本,但未经测试)
功能
- 默认保护登录和找回密码表单。
- 支持 Google reCAPTCHA v3 和 Cloudflare Turnstile。
- 允许 IP 地址绕过验证。
- 向用户发送验证电子邮件。
- 允许自定义验证电子邮件的主题、消息正文和链接。
- 允许自定义验证码长度。
- 允许为自定义表单添加保护。
屏幕截图
安装
-
首选方法是用 Composer
composer require wp-digital/wp-recaptcha
默认情况下,它将被安装为 必用插件。但可以通过
composer.json
中的extra.installer-paths
控制它。 -
另一种方法是克隆此存储库到
wp-content/mu-plugins/
或wp-content/plugins/
cd wp-content/plugins/ git clone git@github.com:wp-digital/wp-recaptcha.git cd wp-recaptcha/ composer install
如果插件作为常规插件安装,则从插件页面或 WP-CLI 激活 Bot Protection: wp plugin activate wp-recaptcha
。
使用方法
添加所需的常量(通常添加到 wp-config.php
)
define( 'WPD_RECAPTCHA_KEY', '' );
define( 'WPD_RECAPTCHA_SECRET', '' );
或只需
define( 'RECAPTCHA_KEY', '' );
define( 'RECAPTCHA_SECRET', '' );
根据常量,插件将使用 Google reCAPTCHA v3 或 Cloudflare Turnstile。如果两个常量都为空,则插件将被禁用。
Cloudflare Turnstile 的检测基于 WPD_RECAPTCHA_KEY
或 RECAPTCHA_KEY
常量,使用正则表达式:^\dx
。
允许 IP 地址绕过验证
有两种方法可以允许 IP 地址绕过验证
-
将 IP 地址添加到
WPD_RECAPTCHA_ALLOWED_IPS
常量define( 'WPD_RECAPTCHA_ALLOWED_IPS', '' ); // comma separated list of IP addresses
-
在管理员区域添加 IP: 设置 -> Bot Protection -> 允许的 IP,每行一个 IP(见 屏幕截图)。
自定义
验证
更改验证电子邮件的主题
/**
* @param string $subject
* @param string $code
* @param WP_User $user
*
* @return string
*/
add_filter( 'wpd_recaptcha_verification_email_subject', function ( string $subject, string $code, WP_User $user ): string {
return 'New subject';
}, 10, 3 );
更改验证电子邮件的消息正文
/**
* @param string $message
* @param string $code
* @param WP_User $user
*
* @return string
*/
add_filter( 'wpd_recaptcha_verification_email_message', function ( string $message, string $code, WP_User $user ): string {
return 'New message';
}, 10, 3 );
修改验证链接
/**
* @param string $link
* @param string $code
* @param WP_User $user
*
* @return string
*/
add_filter( 'wpd_recaptcha_verification_link', function ( string $link, string $code, WP_User $user ): string {
return 'https://example.com/verify/' . $code;
}, 10, 3 );
更改验证码长度
/**
* @param int $length
*
* @return int
*/
add_filter( 'wpd_recaptcha_verification_code_length', function ( int $length ): int {
return 10;
} );
钩子
动作
wpd_recaptcha_loaded
- 在插件加载时触发。接受一个参数:WPD\Recaptcha\Plugin
实例。wpd_recaptcha_verify
- 在需要验证时触发。接受一个参数:WP_User
实例。wpd_recaptcha_form_success
- 在 reCAPTCHA 或 Turnstile 验证成功时触发。接受两个参数:WPD\Forms\FormInterface
实例和WPD\Recaptcha\Response
实例。
文档
为自定义表单添加保护
-
创建实现表单接口
WPD\Forms\FormInterface
的类<?php use WPD\Forms\FormInterface; class CustomForm implements FormInterface { // @TODO: implement methods }
-
将表单添加到
wpd_recaptcha_forms
过滤器/** * @param array $forms * * @return array */ add_filter( 'wpd_recaptcha_forms', function ( array $forms ): array { $forms[] = new CustomForm(); return $forms; } );