| 开发者 |
loanpartnership
xtremeplugins |
|---|---|
| 更新时间 | 2026年5月29日 15:23 |
| PHP版本: | 8.1 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
[xtreme_forms id="X"] shortcode and the native Gutenberg block work inside every WordPress page builder and block theme:
[xtreme_forms id="X"] shortcode drops into any page that was using [wpforms id="X"], [contact-form-7], [gravityform id="X"], etc., so you don't have to touch every theme template[xtreme_forms id="X"] works everywherextreme-forms.zip[xtreme_forms id="X"] or the Gutenberg blockxtreme-forms folder to /wp-content/plugins/, then activate from the Plugins screen.Yes. The free version of Xtreme Forms is the complete plugin — every feature in the list above ships in the free download with no artificial caps on the number of forms, leads, submissions, fields, or admin users. There is no "premium upgrade" overlay on settings pages, no popup nag to upgrade, and no feature gating inside the dashboard. The optional Pro add-on (sold separately at xtremeplugins.com) layers advanced routing rules, webhook retry, and extended analytics on top — it never removes or limits anything in the free plugin.
Most popular WordPress contact form plugins (WPForms, Contact Form 7, Gravity Forms, Ninja Forms, Formidable Forms, Forminator, Fluent Forms) treat the form as the product — they're "form builders" that hand off every submission as an email and stop there. Xtreme Forms treats the lead as the product. Every submission lands in a searchable inbox with a full status workflow (new → contacted → converted), per-lead notes, tags, assignment to team members, and an append-only audit log. So in addition to building the form you also get a lightweight CRM for the leads it captures, all for free, without an external SaaS.
Yes — and you can ship one in under five minutes. Pick the Simple Contact Form template from Xtreme Forms → Forms → Add New → From Template, drop the generated [xtreme_forms id="X"] shortcode on any page, and the form is live. Submissions automatically land in your Lead Inbox and are emailed to the address you configure under Settings → Email.
Yes. The [xtreme_forms id="X"] shortcode works in every page builder's shortcode element. The native Gutenberg block also works inside Elementor Pro's container elements, Bricks' block element, and any block-theme template. There's no separate Elementor / Bricks / Divi addon to install.
If you're looking for a free WPForms alternative because you don't want to pay $99–$399/year for features like conditional logic, multi-step forms, webhooks, and form analytics — yes. Every one of those features is in the free download. The trade-off: WPForms has 20+ third-party integrations as paid Pro addons (Stripe, PayPal, etc.). Xtreme Forms ships built-in webhooks (you can send leads to any CRM yourself) plus direct Zoho / HubSpot / Salesforce / Pipedrive integrations, but doesn't have a Stripe payment field — if you need credit-card collection inside the form itself, WPForms or Gravity Forms is the better fit.
Yes — fully standalone. Xtreme Forms has zero external plugin dependencies. WooCommerce isn't required, and WooCommerce isn't required for any feature listed on this page.
Yes. Xtreme Forms creates per-site database tables and supports network-wide activation. Forms, leads, and settings are scoped per blog and don't bleed across the network.
Yes — it ships a per-form consent checkbox, a right-to-erasure helper for deleting a lead's record on request, configurable data retention (auto-delete leads older than X days), and an append-only audit log. These are tools to help you build a GDPR-aware workflow; legal compliance with GDPR or any other privacy law is still your responsibility.
Yes. Full JSON export and import from the Xtreme Forms → Import / Export admin page. The format is documented and round-trip-safe so you can also pipe leads into your own scripts.
No. Xtreme Forms is fully self-hosted and contacts no external service in its default configuration. Cloudflare Turnstile, Google reCAPTCHA, Zoho, HubSpot, Salesforce, Pipedrive, and outbound webhooks are all opt-in: nothing is sent until you turn them on and configure credentials. See the External services section above for the full disclosure list.
Please use the WordPress.org support forum for free-version questions, or file an issue at the GitHub repository. Pro subscribers also get priority email support at xtremeplugins.com.
Xtreme Forms to Xtreme Forms – WP Contact Form Builder, Lead Capture, Form to Email & Webhooks (matches WP.org's heavily-weighted title-search signal for wp form, contact form, form builder, lead capture, and form to email queries). Short description rewritten to lead with Free WP contact form plugin … Lightweight WPForms alternative. Tag set rebalanced from generic forms + lead generation to higher-intent lead capture + wp form. New "Switching From Another WordPress Form Plugin?" section covers migration from WPForms / Contact Form 7 / Gravity Forms / Ninja Forms / Formidable / Forminator / Fluent Forms. New "Works With Your Page Builder" section names Elementor, Bricks, Beaver Builder, Divi, Oxygen, WPBakery, block themes, and the classic editor. FAQ expanded from 7 questions to 10, each one targeting a high-volume long-tail WP.org search. No code changes.xtreme-forms (with the hyphen used by the visible menu pages), so the welcome page's hook admin_page_xtremeforms-welcome (no hyphen between xtreme and forms) silently fell through and neither admin/css/xf-admin.css nor admin/js/xf-admin.js got loaded. The page rendered as raw HTML on WordPress's default admin styling — no Manrope, no cards, no colors. Widened the hook match so both spellings load the assets. Also added the wrap xf-wrap classes alongside xf-welcome-wrap on the page wrapper so the base palette inherits correctly.assets/img/xtreme-forms-icon.png, 128×128 PNG with the same design as the WP.org listing icon) instead of the placeholder envelope SVG. The logo container picked up a soft white card + subtle teal-tinted radial accent behind it and a rounded 22 px corner so the welcome screen reads as a product surface rather than a generic admin page.width/height attributes — browsers fall back to 300×150 or fill the parent if there's no CSS sizing. Added explicit width="38" height="38" so it can never grow unbounded again. (2) The welcome-page CSS lived in an ob_start/ob_get_clean/wp_add_inline_style block at the top of the partial; on hosts where late-attached inline styles get dropped, the entire welcome-screen stylesheet vanished and the SVG defaulted to the browser's enormous fallback. Moved the ~380 lines of welcome CSS into the properly-enqueued admin/css/xf-admin.css so it loads reliably (same pattern as the 2.5.6 form-builder fix).xtremeforms-welcome in admin/class-xf-admin.php:103, but the post-activation redirect was sending users to admin.php?page=xf-welcome (legacy slug, line 394). WordPress couldn't find the page → fell through to the standard not-allowed error before the user could see the welcome screen on a fresh install. One-character fix to the redirect target. Existing installs are unaffected — the redirect only fires on first activation.!important, but themes like Astra, GeneratePress, Elementor, Bricks, Divi and most page-builder form addons also set min-height: 50px+, line-height: 2, and (sometimes) height: auto !important on button[type="submit"] — that's what was inflating the rendered button to 2–3× the size the admin chose. Added line-height: 1.4, min-height: 0, height: auto, text-transform: none, and border: none locks on both the base .xf-btn-submit rule and every xf-btn-size-{sm,md,lg,xl} variant. The frontend button now renders at exactly the dimensions the admin previews on the form-builder canvas.<input name="submit_label"> in the partial was missing its matching id="submit_label" attribute, so document.getElementById('submit_label') in the builder JS returned null. The live-update event listener was guarded by if (inp && labelInput) which always skipped, the canvas card never re-rendered with the new label, and the unchanged hidden input's old value was the one saved on form submit. Net effect: typing a new label in the right-side panel did nothing on the canvas and the new label never reached the frontend after save. Fixed by adding id="submit_label" to the hidden input. (This is the root cause of the "preview shows one text, frontend shows another" report from earlier.)right: 14px inside the box, which clipped or overlapped the button text whenever Width was set to 100%. Hidden automatically on narrow canvases (<980px) so it doesn't push the canvas wider than the form card..elementor-form button[type="submit"]. Scoped the variants under .xf-form-wrap and marked them !important so they consistently produce the same dimensions on every theme.transform: scale(0.92) and a slight rounding, so it lines up with the form fields instead of floating sloppily off to one side. Min-height is reserved so the layout doesn't jump when the widget finishes loading.@font-face declarations point at the same assets/fonts/manrope/ bundle the admin uses, so no second copy of the font files is shipped and no request is made to fonts.googleapis.com or fonts.gstatic.com. All hardcoded font-family: "Fira Sans" declarations in public/css/xf-public.css (5 of them) were swapped to var(--xf-font) so they inherit the Manrope-first stack.(555) 123-4567. As the visitor types digits into a phone field the value live-formats US-style. International numbers (anything beginning with +) are left alone, so a +44 7700 900123 still goes through unchanged. The field placeholder defaults to (555) 123-4567 only when the form admin hasn't configured a different one.input.showPicker(). The cursor turns into a pointer and the calendar icon is enlarged + brighter on hover so it actually reads as a target.Save Form button white-checkmark fix from the previous local commit (the icon was inheriting the dashicon default blue and was invisible on the blue button).<style> block at the bottom of the form-builder partial that was being attached via wp_add_inline_style() after the page <head> had already shipped the parent stylesheet. On some hosts the inline CSS was being dropped entirely, leaving the Submit row with default browser styling (small blue button, hint sitting flush against it). Moved the ~300 lines of builder CSS into the properly-enqueued admin/css/xf-builder.css so they load with the rest of the builder stylesheet.@import from Google Fonts was removed in 2.4.0 for WordPress.org compliance; the admin has been running on the system font stack since. The font is now back, bundled inside the plugin under assets/fonts/manrope/ (six woff2 subset files, ~92 KB total, plus the OFL 1.1 license), with the @font-face declarations inlined at the top of admin/css/xf-admin.css. No request is ever made to fonts.googleapis.com or fonts.gstatic.com — the font ships locally so this remains compliant with the WordPress.org "no undisclosed external services" guideline.::after affordance introduced in 2.5.2 was too subtle in practice — users were missing that the Submit area is editable. Back to the pre-2.5.2 behavior: the dashed outline, width badge (when floated), and italic gray hint all show by default; they still hide automatically when the Submit button is floated at 1/2 / 1/3 / 1/4 width so it can sit cleanly inline with the last row of fields.[xtreme_forms id="X"]) lands on your clipboard — no need to open the form's edit screen first. The icon briefly turns green ✓ on success.Quote Request, Newsletter, Integrations) shipped placeholder / option strings containing the literal characters …, –, and — instead of the intended ellipsis / en-dash / em-dash. They were typed inside single-quoted PHP strings where PHP does not interpret unicode escapes, so end users saw raw … in the Project Description placeholder of the Quote Request form, in the Budget Range dropdown options, and in two "Saving…" / "Testing…" admin labels. Replaced with the actual UTF-8 characters.::after label that fades in only on hover or when the submit card is selected, so the default canvas view stays clean.https://xtremeplugins.com/api/v1/license/{activate,deactivate} (license key + site URL only, on button click only). Includes terms-of-service and privacy-policy links for xtremeplugins.com. No code changes.Xtremeforms_License::is_active() / get_plan() public API to decide whether to enable its own features.includes/class-xf-license.php — license storage, activation/deactivation against the xtremeplugins.com licensing API (https://xtremeplugins.com/api/v1/license/*, overridable via the xtremeforms_license_activate_url / xtremeforms_license_deactivate_url filters).admin/partials/xf-admin-license.php — License tab UI with masked key display, status pill, plan code, expiry date (when returned), and an "View Pricing →" CTA linking to xtremeplugins.com when no license is active. Inline JS is registered through wp_add_inline_script( 'xtremeforms-admin', ... ) (consistent with the 2.4.0 review fix).xtremeforms_activate_license and xtremeforms_deactivate_license (both require manage_options + nonce).Tested up to: header from 6.9 to 7.0 to match the current WordPress release. No code changes.includes/class-xf-activator.php).ALTER TABLE queries. The four columns previously added by conditional ALTER TABLE ADD COLUMN statements after dbDelta() (activate_at, expire_at, closed_message on the forms table; consent_given on the leads table) are now declared inline in the CREATE TABLE strings. All schema mutation flows through dbDelta(), which is idempotent. Resolves the reviewer report that the plugin "repeatedly tries to create existing tables/columns" during activation and update checks, reproducible on WordPress Playground.maybe_upgrade() is now an option-read fast path. On a fully-migrated site it returns after a single get_option() + version_compare() — no schema queries at all. Adds a per-request static guard so plugins_loaded firing more than once cannot double-invoke dbDelta().PRIMARY KEY uses two spaces in every CREATE TABLE string (per the dbDelta() docs), eliminating a known dbDelta parsing quirk that can re-emit ADD PRIMARY KEY on each run.dbDelta block with hide_errors() + suppress_errors(), restored on exit — activation never prints DB notices to the admin even if a host returns a benign warning.name="xf_field[ID]" while the AJAX handler read $_POST['xtremeforms_field']. Server now reads $_POST['xf_field'], matching the rendered names. Affects every form / every field type.xtremeforms_utm_cookie vs JS xf_utm_cookie).submit_duration always null (server xtremeforms_submit_duration vs JS xf_submit_duration).fonts.googleapis.com) @import from the admin stylesheet. The admin UI now uses the operating-system native font stack only — no third-party font requests are made.xf_ / xl_ AJAX action prefixes to the unique xtremeforms_ prefix across all hooks, nonces, and localized data objects (40+ endpoints) to satisfy the 4+ character prefix requirement.<script> and <style> blocks out of admin partials and into properly enqueued files registered through wp_enqueue_script() / wp_enqueue_style() / wp_add_inline_script() / wp_add_inline_style().wp_verify_nonce / check_ajax_referer) to every $_GET / $_POST / $_REQUEST read flagged by Plugin Check, in addition to the existing current_user_can() capability gates.loanpartnership) to the readme contributors list.current_user_can() capability checks at the top of every admin partial that reads $_GET (defence in depth — the page callbacks were already capability-gated, but partials now self-guard)XF_ class prefix to Xtremeforms_ across all 23 classes (XF_Forms → Xtremeforms_Forms, etc.) to satisfy the 4+ character prefix requirement and prevent collisions with other pluginsnull parent_slug with empty string in the 11 hidden add_submenu_page() calls — silences the "Passing null to parameter of type string is deprecated" notices that WP core emits inside plugin_basename()wp_unslash() + sanitize_text_field() to all submit-layout $_POST reads in the admin save handler.gitignore (hidden file not allowed by Plugin Check); dev ignores moved to .git/info/excludephpunit.xml from the shipped plugin (dev-only)[xtreme_forms id="X"] shortcode (was [xtremeleads] in 4 places — block render was broken)[xtreme_forms id="X"] and Gutenberg block