| 开发者 | optionweb |
|---|---|
| 更新时间 | 2026年5月28日 11:54 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
owfo_dsar_salt, generated once at activation) so the database never holds plaintext PII linkable across systems, and DSAR erasure keeps working even after wp config shuffle-salts.
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 [contact-form-7 id="..."] shortcode in your posts to [owfo_form id="..."]. Email notifications support HTML or plain text with {{token}} interpolation, optional auto-reply, signed outbound webhooks (HMAC-SHA256), and a Gutenberg block in addition to the shortcode and REST API.
ow-forms to /wp-content/plugins/.OW Forms > Forms to create your first form.Yes — OW Forms ships with a one-click Contact Form 7 importer that converts every CF7 form to an OW Forms schema and rewrites all [contact-form-7] shortcodes in your post content.
Yes — form submissions automatically link to OW Consent records when the plugin is active, and DSAR erasure requests automatically delete matching submissions by email hash.
Cloudflare Turnstile, Google reCAPTCHA v3, hCaptcha, and Friendly Captcha. Provider and site/secret keys are configured globally in the Anti-spam settings.
In wp-content/uploads/owf-uploads/YYYY/MM/, protected by a deny-all .htaccess. Files are MIME-validated against a configurable extension allowlist and hash-checked (SHA-256) on storage.
Yes — under the owfo/v1 namespace. Public submission endpoint is nonce-protected; admin endpoints require manage_options capability.
wp config shuffle-salts?Nothing breaks. OW Forms hashes submission emails with a dedicated plugin-owned salt stored in the owfo_dsar_salt option (generated once at activation, never regenerated). It does NOT depend on wp_salt() / the AUTH_KEY constants, so DSAR erasure requests continue to match historical submissions after shuffle-salts. If you want to force-rotate the OW Forms salt (which would invalidate every existing email hash and break future DSAR matching), delete the owfo_dsar_salt option manually via WP-CLI — the next submission will bootstrap a fresh one.
Tested up to: 7.0 (the current WordPress release). 1.0.9 shipped with 6.8, which Plugin Check flagged as outdated (6.8 < 7.0).email_hash() from wp_salt(). The previous implementation used wp_salt() as the hashing factor, so any admin running wp config shuffle-salts (a routine WordPress security hygiene step) would have silently invalidated every email hash already stored in wp_owfo_submissions — every subsequent DSAR erasure request would then have failed to match the historical rows, leaving PII the visitor explicitly asked to delete sitting in the database with no error trail. The plugin now uses a dedicated, plugin-owned salt persisted in the owfo_dsar_salt option (generated once at activation, never regenerated, autoload OFF). Existing installs receive the salt on first call via lazy bootstrap, but no existing hash needs to be re-computed — only newly-written submissions use the new salt, and DSAR matching keeps working on rows written under either salt provided neither is rotated. Recommended for ALL sites.Tested up to corrected to 6.8 (was incorrectly set to 7.0, a WordPress version that does not exist yet — would have been flagged by Plugin Check as an invalid version reference).from_email and default_recipient_email through sanitize_email() instead of the generic sanitize_text_field(), catching malformed inputs at save time instead of silently storing strings that wp_mail() would later reject.route_handle_submission REST endpoint now returns a 404 when called against a submission id that does not exist, instead of silently returning {ok: true} after a no-op wpdb->update.www.example.com URLs (no protocol prefix), which spambots commonly use to slip past the previous https?:// regex.friendly-challenge-0.9.18.module.js next to the existing .min.js, per WP.org Plugin Check requirements (vendored minified JS must ship with the human-readable source alongside)..distignore at the plugin root so the WP.org SVN-deploy pipeline excludes dev-only files (node_modules, tests, build configs) from the published ZIP.languages/ directory at the plugin root so the make pot build step has a known output location and translators can drop their .po files in a predictable place.Tested up to from 6.9 to 7.0 to satisfy the Plugin Check outdated_tested_upto_header rule (the header must point to the current WordPress release for the plugin to surface in directory searches). [Note: 7.0 is not a valid WordPress version — corrected to 6.8 in 1.0.9.][owf_form] shortcode rewrite in post content now actually runs on sites that transited through 1.0.5. The 1.0.6 release introduced the SQL REPLACE but gated it behind the existing owfo_migrated_owf_prefix flag — which any 1.0.5 install already had set to '1', so the rewrite was skipped on the largest existing fleet. The step is now gated by its own independent flag owfo_migrated_shortcode_content so it runs exactly once per install regardless of the version transit path.REPLACE now excludes post_type IN ('revision', 'auto-draft') and post_status IN ('inherit', 'auto-draft'). Rewriting historical revisions would have silently re-authored users' version history.callback registered on hcaptcha.render() only captures the FIRST submit's resolve — every subsequent submit hung forever (button locked, spinner stuck). The render callback now dispatches through holder._owfoHcaptchaResolve, which is updated on every submit before execute() is called.Requires at least from 6.0 to 6.3 to match the apiVersion: 3 declared in blocks/form/block.json (block.json apiVersion 3 was introduced in WP 6.3).[owf_form id="..."] shortcodes in post content. The migration was correctly added to migrate_from_owf_prefix() but shared the owfo_migrated_owf_prefix idempotency flag with the four pre-existing migration steps, which meant sites that had already run 1.0.5 skipped the new step entirely. Fix landed in 1.0.7.owf-captcha-* (3-char prefix) to owfo-captcha-* (4-char prefix). Aligns with the WordPress.org plugin guideline that the prefix rule covers script/style handles, not only PHP identifiers.block.json manifest under blocks/form/ (api-version 3) so Plugin Check stops emitting block_no_block_json and the block is discoverable by the editor inserter metadata API.render + execute) and Friendly Captcha (proof-of-work widget with doneCallback polling). Previous versions silently shipped empty tokens for both providers, which the server rejected with score +100 — all hCaptcha / Friendly Captcha submissions were therefore dropped client-side without any error message.signature is no longer listed as a supported field type. It was advertised in 1.0.x but render_field() and sanitize_value() only ever fell back to <input type="text">. The field count in the description is now 16 (was 17). A real canvas-based signature widget will land in a future release.[owf_form] back-compat shortcode — the < 4-character prefix didn't meet the WordPress.org plugin guidelines. Existing posts had already been migrated in place to [owfo_form] by the 1.0.3 upgrade routine, so the removal only affects content that was never opened for editing after that upgrade./legal/terms-of-service/ → /legal/terms/).uninstall.php handler so all plugin data (custom tables, options, form posts) is cleaned up on plugin deletion.LICENSE.txt file at the plugin root pointing to the GNU GPL v2 text.(form_id, status, id) on the submissions table — eliminates filesort on the admin list filter under high row counts. Existing installs pick the index up automatically on upgrade.SELECT it triggered on cache-cold pages.owfo_purge_budget_per_tick.OWFO_Spam::REJECT_THRESHOLD) filterable via owfo_spam_reject_threshold; routing parameters are stripped from the REST submit payload before validation; baseline check on the uploads directory is memoised per request; OW Shield IP-reputation integration explicitly documented in the external-services section.owf_ to owfo_ to satisfy the 4+ character minimum required by WordPress.org. Existing installations migrate automatically on activation; the legacy [owf_form] shortcode continues to work for backward compatibility.wp_enqueue_style() / wp_enqueue_script() instead of inline <style> / <script> blocks. Assets only load on pages that actually render a form.wp_handle_upload() API instead of move_uploaded_file().sanitize_text_field()).== External services == section with what data is sent, when, and links to each vendor's terms and privacy policy.languages/ow-forms-fr_FR.po. languages/ow-forms.pot template included for community translators.assets/js/vendor/ instead of loaded from an external CDN.