namespace WPForms\Admin\Settings\Captcha;
* Cloudflare Turnstile settings class.
class Turnstile extends Captcha {
* Captcha variable used for JS invoking.
protected static $api_var = 'turnstile';
protected static $slug = 'turnstile';
* The Turnstile Javascript URL-resource.
protected static $url = 'https://challenges.cloudflare.com/turnstile/v0/api.js';
* Inline script for captcha initialization JS code.
protected function get_inline_script() {
return /** @lang JavaScript */
'const wpformsCaptcha = jQuery( ".wpforms-captcha" );
if ( wpformsCaptcha.length > 0 ) {
var widgetID = ' . static::$api_var . '.render( ".wpforms-captcha", {
"refresh-expired": "auto"
wpformsCaptcha.attr( "data-captcha-id", widgetID);
jQuery( document ).trigger( "wpformsSettingsCaptchaLoaded" );
* Array of captcha settings fields.
public function get_settings_fields() {
'id' => 'turnstile-heading',
'content' => $this->get_field_desc(),
'class' => [ 'section-heading', 'specific-note' ],
'turnstile-site-key' => [
'id' => 'turnstile-site-key',
'name' => esc_html__( 'Site Key', 'wpforms-lite' ),
'turnstile-secret-key' => [
'id' => 'turnstile-secret-key',
'name' => esc_html__( 'Secret Key', 'wpforms-lite' ),
'turnstile-fail-msg' => [
'id' => 'turnstile-fail-msg',
'name' => esc_html__( 'Fail Message', 'wpforms-lite' ),
'desc' => esc_html__( 'Displays to users who fail the verification process.', 'wpforms-lite' ),
'default' => esc_html__( 'Cloudflare Turnstile verification failed, please try again later.', 'wpforms-lite' ),
'id' => 'turnstile-theme',
'name' => esc_html__( 'Type', 'wpforms-lite' ),
'auto' => esc_html__( 'Auto', 'wpforms-lite' ),
'light' => esc_html__( 'Light', 'wpforms-lite' ),
'dark' => esc_html__( 'Dark', 'wpforms-lite' ),