{"id":11241,"date":"2026-05-28T11:30:09","date_gmt":"2026-05-28T03:30:09","guid":{"rendered":"https:\/\/aeosub.com\/ow-forms\/"},"modified":"2026-05-28T11:30:09","modified_gmt":"2026-05-28T03:30:09","slug":"ow-forms","status":"publish","type":"post","link":"https:\/\/aeosub.com\/zh\/ow-forms\/","title":{"rendered":"OW Forms"},"content":{"rendered":"<div class=\"plugin-info-card\" style=\"border: 1px solid #e2e8f0;border-radius: 10px;overflow: hidden;margin-bottom: 30px;font-family: -apple-system, system-ui, sans-serif;background: #fff\">\n<table style=\"width: 100%;border-collapse: collapse;font-size: 14px\">\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 15px 20px;text-align: left;width: 35%;color: #4a5568;background: #fcfcfc\"><img decoding=\"async\" src=\"https:\/\/s.w.org\/plugins\/geopattern-icon\/ow-forms.svg\" style=\"width: 40px;height: 40px;border-radius: 6px;margin-right: 12px;vertical-align: middle\"> Developer<\/th>\n<td style=\"padding: 15px 20px;font-weight: 500\"><a href=\"https:\/\/profiles.wordpress.org\/optionweb\/\" target=\"_blank\" rel=\"noopener\">OptionWeb<\/a><\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Version<\/th>\n<td style=\"padding: 12px 20px\">v1.0.9<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Active Installs<\/th>\n<td style=\"padding: 12px 20px\">0 +<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Requires \/ Tested<\/th>\n<td style=\"padding: 12px 20px\">6.3 \/ 6.8.5<\/td>\n<\/tr>\n<tr style=\"border-bottom: 1px solid #edf2f7\">\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Last Updated<\/th>\n<td style=\"padding: 12px 20px\">2026-05-28 3:19am GMT<\/td>\n<\/tr>\n<tr>\n<th style=\"padding: 12px 20px;text-align: left;color: #4a5568;background: #fcfcfc\">Official Link<\/th>\n<td style=\"padding: 12px 20px\"><a href=\"https:\/\/wordpress.org\/plugins\/ow-forms\/\" target=\"_blank\" style=\"text-decoration: none;color: #4a3bca;font-weight: bold\" rel=\"noopener\">View Details \u2192<\/a><\/td>\n<\/tr>\n<\/table><\/div>\n<div class=\"plugin-short-desc\" style=\"margin: 20px 0;padding: 12px 15px;background: #f9fafb;border-left: 4px solid #4a3bca;border-radius: 6px;font-style: italic;color: #4a5568\">Modern, lightweight WordPress form builder with native GDPR compliance, anti-spam stack, and Contact Form 7 importer.<\/div>\n<p>OW Forms is a modern WordPress form builder for sites that prioritize performance, accessibility, and GDPR compliance. Built by OptionWeb for production use on client sites, it ships with a JSON-driven schema engine, a REST-based submission pipeline, and a curated set of 16 field types \u2014 text, email, tel, URL, number, textarea, select, radio, checkbox, checkbox-group, date, time, datetime, file upload, hidden, and rating \u2014 plus auto-injected GDPR consent and anti-spam fields.<\/p>\n<p>The anti-spam stack runs four layers in parallel: a visually-hidden honeypot input that bots fill but humans never see, a time-trap that rejects submissions completed faster than a configurable threshold, a multi-provider CAPTCHA layer (Cloudflare Turnstile, Google reCAPTCHA v3, hCaptcha, or Friendly Captcha), and optional OW Shield IP reputation scoring with a disposable-email blocklist. Every signal is logged so you can tune thresholds without flying blind. Submissions that score above 80 are silently rejected \u2014 no error message, no honeypot leak.<\/p>\n<p>GDPR compliance is native, not bolted on. Every form gets a consent checkbox linked to your privacy policy, IP addresses can be stored pseudonymized or not at all, user agents are SHA-256 hashed by default, and a daily cron purges submissions older than your retention window (CNIL default: 1095 days). When OW Consent is active, OW Forms wires into its DSAR endpoint \u2014 erasure requests automatically delete matching submissions by email hash, with full audit trail. Submission emails are SHA-256 hashed with a plugin-owned salt (option <code>owfo_dsar_salt<\/code>, generated once at activation) so the database never holds plaintext PII linkable across systems, and DSAR erasure keeps working even after <code>wp config shuffle-salts<\/code>.<\/p>\n<p>The one-click Contact Form 7 importer parses every CF7 form in your database, builds the equivalent OW Forms schema (preserving recipient, subject, and field types), and rewrites every <code><p class=\"wpcf7-contact-form-not-found\"><strong>\u62a5\u9519\uff1a<\/strong> \u672a\u627e\u5230\u8fd9\u4e2a\u8868\u5355<\/p><\/code> shortcode in your posts to <code>[owfo_form id=\"...\"]<\/code>. Email notifications support HTML or plain text with <code>{{token}}<\/code> interpolation, optional auto-reply, signed outbound webhooks (HMAC-SHA256), and a Gutenberg block in addition to the shortcode and REST API.<\/p>\n<h3>External services<\/h3>\n<p>OW Forms relies on optional third-party CAPTCHA services to protect form submissions<br \/>\nfrom spam. <strong>None of these services are contacted unless you explicitly enable a<br \/>\nCAPTCHA provider in OW Forms <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> Settings <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> Anti-spam.<\/strong><\/p>\n<p>The OW Shield integration is fully local \u2014 when the OW Shield plugin is installed<br \/>\nand active on the same site, OW Forms reads its IP reputation score from the local<br \/>\ndatabase\/cache. No request leaves your server for this lookup; OW Shield itself<br \/>\nmay contact its own reputation service, which is disclosed in the OW Shield readme.<\/p>\n<p>The Friendly Captcha widget JavaScript is bundled with OW Forms under<br \/>\n    assets\/js\/vendor\/ (no external CDN is hit at page render). Source: the upstream<br \/>\nMIT-licensed package at https:\/\/github.com\/FriendlyCaptcha\/friendly-challenge \u2014<br \/>\nthe files shipped here are the official npm <code>friendly-challenge@0.9.18<\/code> build<br \/>\noutputs (<code>widget.module.js<\/code> and <code>widget.module.min.js<\/code>, unmodified, renamed to<br \/>\n    friendly-challenge-0.9.18.module.js \/ <code>friendly-challenge-0.9.18.module.min.js<\/code><br \/>\nto make the version explicit in the filename). Both the minified and the<br \/>\nhuman-readable non-minified source are shipped per WordPress.org Plugin Check<br \/>\nrequirements.<\/p>\n<p>When a CAPTCHA provider is enabled, OW Forms loads the vendor&#8217;s JavaScript widget<br \/>\non pages that render a form, and posts the challenge solution back to the vendor&#8217;s<br \/>\nverification API when a visitor submits the form. The data sent to the vendor is<br \/>\nlimited to: (a) the challenge token generated client-side by the vendor&#8217;s widget,<br \/>\n(b) the visitor&#8217;s IP address (passed through to the vendor for fraud scoring), and<br \/>\n(c) the site&#8217;s API secret key configured in the settings.<\/p>\n<h4>Cloudflare Turnstile<\/h4>\n<ul>\n<li>What it is: a CAPTCHA \/ bot-mitigation service by Cloudflare, Inc.<\/li>\n<li>When data is sent: only when <code>spam_captcha_provider<\/code> is set to <code>turnstile<\/code>, and<br \/>\nonly on form submission. The widget JS is also loaded on every page that renders<br \/>\na form.<\/li>\n<li>Data sent: Turnstile challenge token, visitor IP, your Turnstile secret key.<\/li>\n<li>Terms of service: https:\/\/www.cloudflare.com\/website-terms\/<\/li>\n<li>Privacy policy: https:\/\/www.cloudflare.com\/privacypolicy\/<\/li>\n<\/ul>\n<h4>Google reCAPTCHA v3<\/h4>\n<ul>\n<li>What it is: an invisible CAPTCHA \/ risk-scoring service by Google LLC.<\/li>\n<li>When data is sent: only when <code>spam_captcha_provider<\/code> is set to <code>recaptcha_v3<\/code>, and<br \/>\nonly on form submission. The widget JS is also loaded on every page that renders<br \/>\na form (this is how reCAPTCHA v3 builds its risk score).<\/li>\n<li>Data sent: reCAPTCHA token, visitor IP, your reCAPTCHA secret key. Google may<br \/>\nalso collect additional telemetry as described in their privacy policy.<\/li>\n<li>Terms of service: https:\/\/policies.google.com\/terms<\/li>\n<li>Privacy policy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n<h4>hCaptcha<\/h4>\n<ul>\n<li>What it is: a privacy-focused CAPTCHA service by Intuition Machines, Inc.<\/li>\n<li>When data is sent: only when <code>spam_captcha_provider<\/code> is set to <code>hcaptcha<\/code>, and<br \/>\nonly on form submission. The widget JS is also loaded on every page that renders<br \/>\na form.<\/li>\n<li>Data sent: hCaptcha token, visitor IP, your hCaptcha secret key.<\/li>\n<li>Terms of service: https:\/\/www.hcaptcha.com\/terms<\/li>\n<li>Privacy policy: https:\/\/www.hcaptcha.com\/privacy<\/li>\n<\/ul>\n<h4>Friendly Captcha<\/h4>\n<ul>\n<li>What it is: a privacy-first, proof-of-work CAPTCHA service by Friendly Captcha GmbH<br \/>\n(Germany). No user puzzle, no tracking cookies.<\/li>\n<li>When data is sent: only when <code>spam_captcha_provider<\/code> is set to <code>friendly_captcha<\/code>,<br \/>\nand only on form submission. The widget JS itself is bundled with OW Forms (not<br \/>\nloaded from an external CDN); only the verification request reaches the vendor.<\/li>\n<li>Data sent: Friendly Captcha challenge token, visitor IP, your Friendly Captcha<br \/>\nsecret key.<\/li>\n<li>Terms of service: https:\/\/friendlycaptcha.com\/legal\/terms\/<\/li>\n<li>Privacy policy: https:\/\/friendlycaptcha.com\/legal\/privacy-end-users\/<\/li>\n<\/ul>\n<h4>Outgoing webhook (admin-configured)<\/h4>\n<ul>\n<li>What it is: a URL of your choosing that OW Forms POSTs to after each submission.<br \/>\nNo data leaves your site until you fill the <code>webhook_url<\/code> setting in OW Forms <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span><br \/>\nSettings <span aria-hidden=\"true\" class=\"wp-exclude-emoji\">\u2192<\/span> Notifications.<\/li>\n<li>When data is sent: on every form submission, immediately after the admin<br \/>\nnotification email is dispatched. Non-blocking \u2014 your visitor&#8217;s submission<br \/>\nresponse is not delayed by the webhook endpoint&#8217;s latency.<\/li>\n<li>Data sent: form id, submission id, sanitized field payload (the same data<br \/>\nstored in your <code>wp_owfo_submissions<\/code> table), site URL, ISO 8601 timestamp.<br \/>\nIf a webhook secret is configured, an <code>X-OWFO-Signature<\/code> HMAC-SHA256 header<br \/>\nis added so the receiver can verify the payload origin.<\/li>\n<li>Vendor: whoever owns the URL you configured. OW Forms has no built-in vendor<br \/>\nfor this \u2014 it is your responsibility to ensure the receiving endpoint complies<br \/>\nwith applicable privacy regulations for your submissions.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Modern, lightweight WordPress form builder with native GDPR compliance, anti-spam stack, and Contact Form 7 importer.<\/p>","protected":false},"author":1,"featured_media":9317,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[252],"tags":[1184,1156,1159,710,590,555],"class_list":["post-11241","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-trends","tag-anti-spam","tag-contact-form","tag-form-builder","tag-forms","tag-gdpr","tag-wordpress-plugin"],"_links":{"self":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/11241","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/comments?post=11241"}],"version-history":[{"count":0,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/posts\/11241\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media\/9317"}],"wp:attachment":[{"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/media?parent=11241"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/categories?post=11241"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aeosub.com\/zh\/wp-json\/wp\/v2\/tags?post=11241"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}