array( 'secret' => WEEDOPS_TURNSTILE_SECRET_KEY, 'response' => $token, 'remoteip' => $_SERVER['REMOTE_ADDR'] ?? '', ), )); if (is_wp_error($response)) return false; $body = json_decode(wp_remote_retrieve_body($response), true); return !empty($body['success']); } // Handle deck request form submission (early, before headers sent) function weedops_handle_deck_request_init() { if (!isset($_POST['weedops_deck_request'])) return; // Verify nonce if (!wp_verify_nonce($_POST['_wpnonce'] ?? '', 'weedops_deck_request')) { set_transient('weedops_form_error_' . $_SERVER['REMOTE_ADDR'], 'Invalid request.', 60); wp_redirect(home_url('/#deck')); exit; } // Verify Turnstile if configured if (WEEDOPS_TURNSTILE_SITE_KEY && !weedops_verify_turnstile($_POST['cf-turnstile-response'] ?? '')) { set_transient('weedops_form_error_' . $_SERVER['REMOTE_ADDR'], 'Verification failed. Please try again.', 60); wp_redirect(home_url('/#deck')); exit; } $name = sanitize_text_field($_POST['name'] ?? ''); $email = sanitize_email($_POST['email'] ?? ''); $note = sanitize_textarea_field($_POST['note'] ?? ''); if (empty($name) || empty($email)) { set_transient('weedops_form_error_' . $_SERVER['REMOTE_ADDR'], 'Name and email are required.', 60); wp_redirect(home_url('/#deck')); exit; } // Send notification email $to = 'john@weedops.site'; $subject = 'WeedOps Deck Request: ' . $name; $body = "Name: {$name}\nEmail: {$email}\n\nNote:\n{$note}"; $headers = array('Reply-To: ' . $name . ' <' . $email . '>'); wp_mail($to, $subject, $body, $headers); set_transient('weedops_form_success_' . $_SERVER['REMOTE_ADDR'], true, 60); wp_redirect(home_url('/#deck')); exit; } add_action('template_redirect', 'weedops_handle_deck_request_init'); // Get form result from transient (after redirect) function weedops_get_form_result() { $ip = $_SERVER['REMOTE_ADDR']; $success = get_transient('weedops_form_success_' . $ip); if ($success) { delete_transient('weedops_form_success_' . $ip); return true; } $error = get_transient('weedops_form_error_' . $ip); if ($error) { delete_transient('weedops_form_error_' . $ip); return $error; } return null; }