shtrihstr / 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 not auto-updated.
Last update: 2024-09-18 18:53:55 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; } );