** * Cloudflare Turnstile für Contact Form 7 (Montague-Bikes) */ define('TURNSTILE_SITEKEY_MONTAGUE', '0x4AAAAAACaq5s0YzgP3Y9DN'); define('TURNSTILE_SECRET_MONTAGUE', '0x4AAAAAACaq5mOYWQ9j3bDjeY7mdp2s6qo'); // 1. Turnstile Script & Widget vor dem Senden-Button einbinden add_action('wp_enqueue_scripts', function() { wp_enqueue_script('cloudflare-turnstile', 'https://challenges.cloudflare.com/turnstile/v0/api.js', array(), null, true); }); add_filter('wpcf7_form_elements', function($content) { $widget = '
'; return str_replace('[submit', $widget . "\n[submit", $content); }); // 2. Kanonischer Server-Side Siteverify Call beim Formular-Submit add_filter('wpcf7_validate', function($result, $tags) { $token = isset($_POST['cf-turnstile-response']) ? sanitize_text_field($_POST['cf-turnstile-response']) : ''; $remote_ip = isset($_SERVER['REMOTE_ADDR']) ? sanitize_text_field($_SERVER['REMOTE_ADDR']) : ''; if (empty($token)) { $result->invalidate('cf-turnstile', 'Bitte schließe die Sicherheitsüberprüfung ab.'); return $result; } $response = wp_remote_post('https://challenges.cloudflare.com/turnstile/v0/siteverify', array( 'body' => array( 'secret' => TURNSTILE_SECRET_MONTAGUE, 'response' => $token, 'remoteip' => $remote_ip, ), )); if (is_wp_error($response)) { $result->invalidate('cf-turnstile', 'Sicherheitsüberprüfung fehlgeschlagen (Verbindungsfehler).'); return $result; } $body = json_decode(wp_remote_retrieve_body($response), true); if (empty($body['success'])) { $result->invalidate('cf-turnstile', 'Sicherheitsüberprüfung fehlgeschlagen. Bitte versuche es erneut.'); } return $result; }, 10, 2);