{"id":371377,"date":"2026-10-20T07:30:22","date_gmt":"2026-10-20T07:30:22","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/chargeforms\/"},"modified":"2026-10-20T10:40:34","modified_gmt":"2026-10-20T10:40:34","slug":"chargeforms","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/chargeforms\/","author":21015664,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.270.13","stable_tag":"0.270.13","tested":"7.1.3","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"ChargeForms","header_author":"ChargeForms","header_description":"A fast, free drag-and-drop form builder for WordPress \u2014 conditional logic, entry management, and payments, built in.","assets_banners_color":"684be8","last_updated":"2026-10-20 10:40:34","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/chargeforms.com","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":0,"downloads":87,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.270.12":{"tag":"0.270.12","author":"uzairrehman","date":"2026-10-20 07:30:00","revision":3756069},"0.270.13":{"tag":"0.270.13","author":"uzairrehman","date":"2026-10-20 10:40:34","revision":3756457}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3756069,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3756069,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3756069,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3756069,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3756788,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"preferredVersions\":{\"php\":\"8.0\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=chargeforms\",\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"activatePlugin\",\"pluginPath\":\"chargeforms\\\/chargeforms.php\"},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"chargeforms\"},\"options\":{\"activate\":true}}]}"}},"all_blocks":[],"tagged_versions":["0.270.12","0.270.13"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3756069,"resolution":"1","location":"assets","locale":"","width":1920,"height":1080},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3756069,"resolution":"2","location":"assets","locale":"","width":1920,"height":1080},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3756069,"resolution":"3","location":"assets","locale":"","width":1920,"height":1080},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3756069,"resolution":"4","location":"assets","locale":"","width":1920,"height":1080},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3756069,"resolution":"5","location":"assets","locale":"","width":1920,"height":1080},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3756069,"resolution":"6","location":"assets","locale":"","width":1920,"height":1080},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3756069,"resolution":"7","location":"assets","locale":"","width":1920,"height":1080},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3756069,"resolution":"8","location":"assets","locale":"","width":1920,"height":1080}},"screenshots":{"1":"Dashboard overview","2":"Drag-and-drop form builder","3":"Field customization panel","4":"Entries and submissions list","5":"Reports and analytics","6":"Payments setup","7":"Integrations","8":"A live public form"}},"plugin_section":[],"plugin_tags":[130308,358,2253,30663,155927],"plugin_category":[42],"plugin_contributors":[287632],"plugin_business_model":[],"class_list":["post-371377","plugin","type-plugin","status-publish","hentry","plugin_tags-conditional-logic","plugin_tags-contact-form","plugin_tags-form-builder","plugin_tags-multi-step-form","plugin_tags-payment-form","plugin_category-contact-forms","plugin_contributors-uzairrehman","plugin_committers-uzairrehman"],"banners":{"banner":"https:\/\/ps.w.org\/chargeforms\/assets\/banner-772x250.png?rev=3756069","banner_2x":"https:\/\/ps.w.org\/chargeforms\/assets\/banner-1544x500.png?rev=3756069","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/chargeforms\/assets\/icon-128x128.png?rev=3756069","icon_2x":"https:\/\/ps.w.org\/chargeforms\/assets\/icon-256x256.png?rev=3756069","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/chargeforms\/assets\/screenshot-1.png?rev=3756069","caption":"Dashboard overview"},{"src":"https:\/\/ps.w.org\/chargeforms\/assets\/screenshot-2.png?rev=3756069","caption":"Drag-and-drop form builder"},{"src":"https:\/\/ps.w.org\/chargeforms\/assets\/screenshot-3.png?rev=3756069","caption":"Field customization panel"},{"src":"https:\/\/ps.w.org\/chargeforms\/assets\/screenshot-4.png?rev=3756069","caption":"Entries and submissions list"},{"src":"https:\/\/ps.w.org\/chargeforms\/assets\/screenshot-5.png?rev=3756069","caption":"Reports and analytics"},{"src":"https:\/\/ps.w.org\/chargeforms\/assets\/screenshot-6.png?rev=3756069","caption":"Payments setup"},{"src":"https:\/\/ps.w.org\/chargeforms\/assets\/screenshot-7.png?rev=3756069","caption":"Integrations"},{"src":"https:\/\/ps.w.org\/chargeforms\/assets\/screenshot-8.png?rev=3756069","caption":"A live public form"}],"raw_content":"<!--section=description-->\n<p>ChargeForms is a fast, free drag-and-drop form builder for WordPress \u2014 contact forms, surveys, multi-step forms, and payment forms, without page reloads or a bloated front-end bundle slowing your site down.<\/p>\n\n<p>Every feature in this plugin \u2014 conditional logic, payments, SMTP email delivery, CSV import, every field type \u2014 is included free, with no paid license required and no feature locked behind a paywall. <a href=\"https:\/\/chargeforms.com\">ChargeForms.com<\/a> | <a href=\"https:\/\/chargeforms.com\/docs\">Documentation<\/a><\/p>\n\n<h4>Drag-and-Drop Form Builder<\/h4>\n\n<ul>\n<li>30+ field types out of the box \u2014 text, address, ratings, file upload, payment fields, and more<\/li>\n<li>Conditional logic with nested AND\/OR\/NOT groups \u2014 show or hide fields based on other answers<\/li>\n<li>Multi-step forms with a progress bar and per-step validation<\/li>\n<li>All bundled form templates, Save &amp; Resume, and CSV entry import<\/li>\n<li>Lightweight front-end rendering \u2014 visitors never load an admin-sized JS bundle<\/li>\n<\/ul>\n\n<h4>Accept Payments<\/h4>\n\n<ul>\n<li>Stripe and PayPal, including Stripe recurring subscriptions (monthly\/yearly plans, free trials, cancellation)<\/li>\n<li>Payment Item, Custom Amount, Payment Method, and Payment Summary fields<\/li>\n<li>No platform fee on top of your payment processor's own rate<\/li>\n<\/ul>\n\n<h4>Entry Management<\/h4>\n\n<ul>\n<li>A full entries dashboard in wp-admin \u2014 view, edit, filter, export, and manage every submission<\/li>\n<li>Email notifications on every submission, with delivery logging and automatic retry<\/li>\n<\/ul>\n\n<h4>Email Delivery (Native SMTP)<\/h4>\n\n<ul>\n<li>Connect Gmail, Microsoft 365, Amazon SES, SendGrid, Mailgun, Brevo, Postmark, Zoho, or any custom SMTP server<\/li>\n<li>Encrypted credentials, multiple SMTP connections, real test-email sending, and a full delivery log<\/li>\n<\/ul>\n\n<h4>Integrations<\/h4>\n\n<ul>\n<li>Webhook \u2014 send every submission as JSON to Zapier, Make, n8n, or your own endpoint<\/li>\n<li>Mailchimp, Brevo, ActiveCampaign, Slack, Discord, Telegram, Notion, HubSpot, Google Sheets<\/li>\n<\/ul>\n\n<h4>Spam &amp; Security<\/h4>\n\n<ul>\n<li>Honeypot spam protection built in<\/li>\n<li>reCAPTCHA, hCaptcha, Cloudflare Turnstile, or CleanTalk \u2014 your choice, off by default<\/li>\n<li>Double opt-in for email confirmation<\/li>\n<\/ul>\n\n<h4>Planned for Future Releases<\/h4>\n\n<ul>\n<li>Additional integrations beyond generic Webhook (CRM, marketing platforms)<\/li>\n<li>Conversational (one-question-at-a-time) form mode<\/li>\n<li>AI form generation<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin optionally connects to a number of third-party services, every one of them off by default. Full detail on each is in the \"What external services does this plugin use?\" FAQ above; summarized here per the WordPress.org guideline:<\/p>\n\n<ul>\n<li><strong>Google Fonts<\/strong> \u2014 loads the Poppins typeface on ChargeForms' own wp-admin screens only (never your site's front end), when enabled under Global Settings. Sends the admin's IP\/browser info to Google on every admin page load while enabled. <a href=\"https:\/\/developers.google.com\/fonts\/faq\">Terms<\/a> \/ <a href=\"https:\/\/policies.google.com\/privacy\">Privacy<\/a>.<\/li>\n<li><strong>reCAPTCHA, hCaptcha, Cloudflare Turnstile, CleanTalk<\/strong> \u2014 optional spam-protection providers; only loaded on a form's front end if you enable one under Global Settings &gt; Security. Processes the visitor's IP\/browser data when a protected form is viewed\/submitted. <a href=\"https:\/\/policies.google.com\/privacy\">Google Privacy<\/a> \/ <a href=\"https:\/\/www.hcaptcha.com\/privacy\">hCaptcha Privacy<\/a> \/ <a href=\"https:\/\/www.cloudflare.com\/privacypolicy\/\">Cloudflare Privacy<\/a> \/ <a href=\"https:\/\/cleantalk.org\/privacy\">CleanTalk Privacy<\/a>.<\/li>\n<li><strong>Stripe, PayPal<\/strong> \u2014 only active on a form with a Payment field where you've connected your own account. Sends the payment amount and the payer's entered billing details when a visitor pays. <a href=\"https:\/\/stripe.com\/privacy\">Stripe Privacy<\/a> \/ <a href=\"https:\/\/www.paypal.com\/privacy\">PayPal Privacy<\/a>.<\/li>\n<li><strong>Webhook, Mailchimp, Slack, Discord, Telegram, Notion, HubSpot, Google Sheets<\/strong> \u2014 only send data if you explicitly connect them yourself under the Integrations screen, to the endpoint\/account you configure, at the moment a form is submitted. <a href=\"https:\/\/mailchimp.com\/legal\/terms\/\">Mailchimp Terms<\/a> \/ <a href=\"https:\/\/mailchimp.com\/legal\/privacy\/\">Privacy<\/a> \u2014 <a href=\"https:\/\/notion.notion.site\/Terms-and-Privacy-28ffdd083dc3473e9c2da6ec011b58ac\">Notion Terms &amp; Privacy<\/a> \/ <a href=\"https:\/\/www.notion.com\/trust\/privacy-policy\">Privacy<\/a> \u2014 <a href=\"https:\/\/legal.hubspot.com\/terms-of-service\">HubSpot Terms<\/a> \/ <a href=\"https:\/\/legal.hubspot.com\/privacy-policy\">Privacy<\/a> \u2014 <a href=\"https:\/\/telegram.org\/tos\">Telegram Terms<\/a> \/ <a href=\"https:\/\/telegram.org\/privacy\">Privacy<\/a>.<\/li>\n<li><strong>Address autocomplete<\/strong> \u2014 optional; sends each keystroke in an Address field's autocomplete box to OpenStreetMap's Nominatim API. <a href=\"https:\/\/operations.osmfoundation.org\/policies\/nominatim\/\">Usage Policy<\/a> \/ <a href=\"https:\/\/wiki.osmfoundation.org\/wiki\/Privacy_Policy\">OSMF Privacy<\/a>.<\/li>\n<li><strong>chargeforms.com license API<\/strong> \u2014 only contacted if you activate a Pro license key, to verify it. <a href=\"https:\/\/chargeforms.com\/legal\/terms\">Terms<\/a> \/ <a href=\"https:\/\/chargeforms.com\/legal\/privacy\">Privacy<\/a>.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>chargeforms<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install directly from the WordPress Plugin Directory.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Go to ChargeForms in your admin sidebar to build your first form.<\/li>\n<li>Paste the <code>[chargeforms id=\"X\"]<\/code> shortcode into any page or post.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20really%20free%3F\"><h3>Is this really free?<\/h3><\/dt>\n<dd><p>Yes. Every feature included in this WordPress.org plugin is available without a paid license, time limit, or submission cap.<\/p><\/dd>\n<dt id=\"do%20i%20need%20coding%20skills%20to%20use%20chargeforms%3F\"><h3>Do I need coding skills to use ChargeForms?<\/h3><\/dt>\n<dd><p>No. Everything is drag-and-drop \u2014 fields, conditional logic, multi-step layout, and payment setup are all configured from the builder UI, no code required.<\/p><\/dd>\n<dt id=\"will%20chargeforms%20slow%20down%20my%20website%3F\"><h3>Will ChargeForms slow down my website?<\/h3><\/dt>\n<dd><p>No. The front end only loads the JS\/CSS a given form actually uses, not an admin-sized bundle \u2014 visitors never download builder code they'll never run.<\/p><\/dd>\n<dt id=\"can%20i%20use%20conditional%20logic%20when%20building%20a%20form%3F\"><h3>Can I use conditional logic when building a form?<\/h3><\/dt>\n<dd><p>Yes. Show or hide any field based on other answers, with nested AND\/OR\/NOT groups for more complex rules.<\/p><\/dd>\n<dt id=\"can%20i%20build%20multi-step%20forms%3F\"><h3>Can I build multi-step forms?<\/h3><\/dt>\n<dd><p>Yes. Multi-step forms come with a progress bar and per-step validation built in.<\/p><\/dd>\n<dt id=\"can%20i%20export%20or%20import%20form%20submission%20data%3F\"><h3>Can I export or import form submission data?<\/h3><\/dt>\n<dd><p>Yes. Every entry can be filtered, exported, and managed from the wp-admin entries dashboard, and CSV entry import is included free.<\/p><\/dd>\n<dt id=\"can%20i%20migrate%20from%20contact%20form%207%2C%20wpforms%2C%20or%20ninja%20forms%3F\"><h3>Can I migrate from Contact Form 7, WPForms, or Ninja Forms?<\/h3><\/dt>\n<dd><p>Yes. The built-in Migrator (Tools screen) reads your existing forms directly from each plugin's own data and rebuilds them as ChargeForms forms.<\/p><\/dd>\n<dt id=\"i%20want%20to%20report%20a%20bug%2C%20where%20do%20i%20report%20it%3F\"><h3>I want to report a bug, where do I report it?<\/h3><\/dt>\n<dd><p>Please use the <a href=\"https:\/\/wordpress.org\/support\/plugin\/chargeforms\/\">support forum<\/a> \u2014 that's actively monitored.<\/p><\/dd>\n<dt id=\"where%27s%20the%20human-readable%20source%20for%20the%20built%20js%2Fcss%20files%3F\"><h3>Where's the human-readable source for the built JS\/CSS files?<\/h3><\/dt>\n<dd><p>The <code>assets\/build\/<\/code> files shipped in this plugin (builder.js, frontend.js, and their CSS) are compiled by webpack from real, unminified source \u2014 nothing here is obfuscated, only minified for production the same way every WordPress admin ships its own JS. That source ships in this same plugin package: see <code>assets\/src\/<\/code> for the real, readable JavaScript, and <code>webpack.config.js<\/code>\/<code>webpack.vue.config.js<\/code> plus <code>package.json<\/code> for the exact build configuration and tooling versions used to produce <code>assets\/build\/<\/code> from it. To rebuild it yourself: <code>npm ci<\/code> followed by <code>npm run build<\/code> (the admin builder and public front-end bundle) and <code>npm run vue:build<\/code> (the Vue-based Forms List screen).<\/p><\/dd>\n<dt id=\"what%20external%20services%20does%20this%20plugin%20use%3F\"><h3>What external services does this plugin use?<\/h3><\/dt>\n<dd><p><strong>Google Fonts (optional, off by default).<\/strong> Turned on under Global Settings &gt; General, this plugin loads the Poppins typeface from Google Fonts (<code>fonts.googleapis.com<\/code>\/<code>fonts.gstatic.com<\/code>) on ChargeForms' own wp-admin screens only (never on your site's front end, never on a visitor-facing page) so the admin UI matches its own design. No request to Google happens until you enable it; the admin UI uses your system font stack otherwise. While enabled, this sends the logged-in admin's IP address and browser info to Google on every admin page load, the same as any page that embeds a Google Fonts stylesheet. Google's terms: https:\/\/developers.google.com\/fonts\/faq and privacy policy: https:\/\/policies.google.com\/privacy.<\/p>\n\n<p><strong>reCAPTCHA \/ hCaptcha \/ Cloudflare Turnstile \/ CleanTalk.<\/strong> Entirely optional, off by default. If you turn one on (Global Settings &gt; Security) to add spam protection to your forms, the corresponding third-party service's own script loads on your front-end forms and processes the visitor's IP\/browser data per that service's own terms \u2014 Google (reCAPTCHA): https:\/\/policies.google.com\/privacy, hCaptcha: https:\/\/www.hcaptcha.com\/privacy, Cloudflare (Turnstile): https:\/\/www.cloudflare.com\/privacypolicy\/, CleanTalk: https:\/\/cleantalk.org\/privacy.<\/p>\n\n<p><strong>Stripe \/ PayPal (optional).<\/strong> Only active on a form where you've added a Payment field and connected your own Stripe or PayPal account (Global Settings &gt; Payment Settings). When a visitor pays, the payment amount and the payer's billing details they entered are sent directly to Stripe (https:\/\/stripe.com\/privacy) or PayPal (https:\/\/www.paypal.com\/privacy) to process the charge \u2014 standard for any WordPress payment plugin. Nothing is sent to either service on a form with no Payment field.<\/p>\n\n<p><strong>Your own configured integrations (Webhook, Mailchimp, Slack, Discord, Telegram, Notion, HubSpot, Google Sheets).<\/strong> Only ever send data if you explicitly connect them yourself (Integrations screen) \u2014 nothing is sent to any of these unless you've entered your own API key\/URL for that specific service. When connected, every submission's data is sent to that service at the time of submission: Mailchimp (subscriber added to your list) \u2014 https:\/\/mailchimp.com\/legal\/terms\/ \/ https:\/\/mailchimp.com\/legal\/privacy\/; Notion (a page created in your database) \u2014 https:\/\/notion.notion.site\/Terms-and-Privacy-28ffdd083dc3473e9c2da6ec011b58ac \/ https:\/\/www.notion.com\/trust\/privacy-policy; HubSpot (a contact created\/updated in your CRM) \u2014 https:\/\/legal.hubspot.com\/terms-of-service \/ https:\/\/legal.hubspot.com\/privacy-policy; Telegram (a message sent via your bot) \u2014 https:\/\/telegram.org\/tos \/ https:\/\/telegram.org\/privacy.<\/p>\n\n<p><strong>Address autocomplete (optional).<\/strong> If a form uses the Address field's autocomplete feature, each keystroke in the address box is sent to OpenStreetMap's Nominatim search API (<code>nominatim.openstreetmap.org<\/code>) to fetch matching addresses. Nominatim usage policy: https:\/\/operations.osmfoundation.org\/policies\/nominatim\/ \u2014 OSM Foundation privacy policy: https:\/\/wiki.osmfoundation.org\/wiki\/Privacy_Policy.<\/p>\n\n<p><strong>License validation (Pro only).<\/strong> If you activate a Pro license key, that key and your site URL are sent to chargeforms.com to verify it. Nothing is sent if you're on the free plan. Terms: https:\/\/chargeforms.com\/legal\/terms \u2014 Privacy: https:\/\/chargeforms.com\/legal\/privacy.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.270.13<\/h4>\n\n<ul>\n<li>Fixed: removed <code>chargeforms<\/code> from the Contributors header \u2014 not a registered WordPress.org username, so it was silently dropped on import. Only <code>uzairrehman<\/code> remains.<\/li>\n<li>Changed: rewrote the Description section into organized feature sections (Form Builder, Payments, Entry Management, Email Delivery, Integrations, Spam &amp; Security) and expanded the FAQ with questions on performance, conditional logic, multi-step forms, entry export\/import, and migrating from Contact Form 7, WPForms, or Ninja Forms.<\/li>\n<li>Changed: updated plugin tags to better reflect the plugin's actual differentiators (payment form, multi-step form, conditional logic).<\/li>\n<\/ul>\n\n<h4>0.270.12<\/h4>\n\n<ul>\n<li>Fixed: escape generated form markup, SVG icons, and report output at the point of rendering for WordPress.org security compliance.<\/li>\n<li>Changed: CSV entry import, all bundled templates, Save &amp; Resume, multiple SMTP connections, and every implemented builder field are available without a paid license.<\/li>\n<li>Improved: the readme and license screen now state clearly that every feature shipped in the WordPress.org plugin is free.<\/li>\n<\/ul>\n\n<h4>0.268.0<\/h4>\n\n<ul>\n<li>Fix: Keep existing Pro fields editable through MCP when a license expires, while blocking new unlicensed Pro fields.<\/li>\n<li>Test: Validate structured AI previews and WordPress identifier placeholders.<\/li>\n<\/ul>\n\n<h4>0.267.0<\/h4>\n\n<ul>\n<li>Fix: Pro access requires a verified paid license activated on this site.<\/li>\n<li>Fix: Paid expiry is enforced locally; temporary verification outages have a bounded 72-hour grace period.<\/li>\n<li>Fix: Display accurate site limits and retry remote site-slot release after a failed deactivation.<\/li>\n<\/ul>\n\n<h4>0.266.0<\/h4>\n\n<ul>\n<li>Fixed: two function signatures used PHP 8.4's deprecated implicit-nullable form (<code>array $x = null<\/code>). They are now written explicitly as <code>?array $x = null<\/code> \u2014 identical behaviour, no deprecation notice. The explicit form still works on the plugin's minimum PHP 7.4.<\/li>\n<li>Improved: the test suite no longer prints deprecation notices from its own REST request stub when run with full error reporting. No plugin behaviour changed in this release.<\/li>\n<\/ul>\n\n<h4>0.265.0<\/h4>\n\n<ul>\n<li>Fixed: a column's width only ever applied on desktop. The width was printed into the page as an inline flex-basis, which overrides every media query in the stylesheet, so the builder's Tablet and Mobile previews had no effect on the real form and two-column rows did not stack properly on smaller screens. Columns now carry their width as CSS variables and the stylesheet applies the right one per screen size: tablet (up to 1024px) falls back to the desktop width, and mobile (up to 600px) falls back to full width unless you set a specific mobile width.<\/li>\n<li>Added: per-device column widths in the builder \u2014 select a column, switch the preview to Tablet or Mobile, and set a width just for that screen size, or choose Inherit to reuse the wider device's width.<\/li>\n<li>Fixed: a column could not be selected in the form builder at all. Clicking a column always selected its parent row instead, so the Column Width setting had no way to appear. Columns are now selectable like any other field, including with the keyboard.<\/li>\n<li>Improved: verified the plugin still parses cleanly under PHP 7.4+ and that the existing test suite and build stay green.<\/li>\n<\/ul>\n\n<h4>0.264.0<\/h4>\n\n<ul>\n<li>Fixed: form submissions silently stopped working on sites using a page cache or CDN. The form's security nonce is printed into the page, so a cached page kept serving the same nonce until it expired (WordPress nonces last roughly 12-24 hours), after which every submission was rejected with \"Security check failed\" and nothing on the page explained why. The form now refreshes its own nonce when the page loads, so cached pages keep submitting normally.<\/li>\n<li>Fixed: the Forms screen loaded about 1.3 MB of JavaScript and CSS it never used. The older Vue version of that screen is retired, but its files were still being loaded on every visit even though the page renders the standard table. They now load only when the Vue screen is explicitly requested, removing that dead weight from every Forms page load.<\/li>\n<li>Improved: verified the plugin still parses cleanly under PHP 7.4+ (its declared minimum) and that the existing test suite and build stay green.<\/li>\n<\/ul>\n\n<h4>0.263.0<\/h4>\n\n<ul>\n<li>Fixed: third-round review findings \u2014 Notion's Terms\/Privacy URLs and the license API's chargeforms.com Terms\/Privacy URLs in the readme were broken (401\/404); replaced with verified-working links (chargeforms.com's real paths are under <code>\/legal\/<\/code>, not <code>\/terms<\/code>\/<code>\/privacy<\/code>). Added HubSpot's Terms\/Privacy links, which the readme had omitted. Removed the admin-notice-suppression feature entirely (Menu and Builder_Page both cleared WordPress core's and other plugins' admin_notices on ChargeForms' own screens) \u2014 not something WordPress.org guidelines allow scoping down, only removing, same as the earlier Custom CSS\/JS removal.<\/li>\n<\/ul>\n\n<h4>0.262.0<\/h4>\n\n<ul>\n<li>Fixed: WordPress.org's automated submission scan rejected 0.261.0 outright (<code>PluginCheck.CodeAnalysis.Heredoc.NotAllowed<\/code>) \u2014 the <code>wp_add_inline_script()<\/code>\/<code>wp_add_inline_style()<\/code> conversions in 0.261.0 used heredoc\/nowdoc (<code>&lt;&lt;&lt;<\/code>) syntax to hold the JS\/CSS strings, which this scanner disallows entirely regardless of content. All 18 heredoc\/nowdoc blocks rewritten as plain quoted PHP strings (multi-line single-quoted strings, or string concatenation where a translated value needed to be inserted) with identical JS\/CSS content \u2014 no behavior change, just different PHP string syntax.<\/li>\n<\/ul>\n\n<h4>0.261.0<\/h4>\n\n<ul>\n<li>Fixed: addressed the WordPress.org directory's second review pass \u2014 text domain renamed to match the reviewed plugin slug (<code>chargeforms<\/code>), the Custom CSS\/JS feature removed entirely (arbitrary code insertion isn't permitted, only removing it satisfies the guideline), every remaining inline <code>&lt;script&gt;<\/code>\/<code>&lt;style&gt;<\/code> block converted to <code>wp_enqueue_script<\/code>\/<code>wp_add_inline_script<\/code>\/<code>wp_add_inline_style<\/code>, two unused core-file includes removed, Google Fonts changed from always-on to an explicit opt-in toggle (Global Settings &gt; General, off by default), four previously-undisclosed external services documented (Mailchimp, Notion, Telegram, Nominatim\/OpenStreetMap), and the built JS\/CSS source now ships inside the plugin package itself (<code>assets\/src\/<\/code>, <code>webpack.config.js<\/code>, <code>package.json<\/code>) since this plugin's repository stays private.<\/li>\n<\/ul>\n\n<h4>0.260.0<\/h4>\n\n<ul>\n<li>Fixed: the live Plugin Check scan's remaining 18 <code>WordPress.DB.PreparedSQL.NotPrepared<\/code> errors (entries\/forms\/form-starts data layer). Two earlier restructuring attempts failed (0.255.0's variable-held query text, 0.257.0's single-ternary-of-literals both still tripped the check); the actual fix the scanner accepts is duplicating each conditional branch so <code>$wpdb-&gt;prepare()<\/code>'s query-text argument is a genuine inline literal at every call site, with zero variable indirection of any kind \u2014 verified against the live scanner one method at a time before applying it everywhere.<\/li>\n<\/ul>\n\n<h4>0.254.0<\/h4>\n\n<ul>\n<li>Fixed: every remaining direct-SQL \"prepared statement\" warning from the site's live Plugin Check scan (table names built from string concatenation, even though every value was already placeholdered) \u2014 rewritten to use <code>$wpdb-&gt;prepare()<\/code>'s <code>%i<\/code> identifier placeholder (WP 6.2+) across the entries, activity log, drafts, subscriptions, form starts, notification log, API log, email log, forms, install migration, and legacy-importer data layers. Minimum required WordPress version raised from 6.0 to 6.2 for <code>%i<\/code> support.<\/li>\n<\/ul>\n\n<h4>0.253.0<\/h4>\n\n<ul>\n<li>Fixed: a few more nonce-recommended\/sanitization warnings caught after re-running the site's own live Plugin Check tool (its results don't match the automated pre-review email's tool 1:1), plus mixed line endings in class-email-log.php.<\/li>\n<\/ul>\n\n<h4>0.252.0<\/h4>\n\n<ul>\n<li>Fixed: a second, larger round of WordPress.org Plugin Check findings caught by the tool's live in-admin scan after 0.251.0's release \u2014 more escaping gaps in field-rendering helpers, a genuine i18n string wrapped in raw HTML, <code>ini_set()<\/code> sniff coverage, an unprefixed global in uninstall.php, and every remaining direct-database-query\/prepared-SQL warning across the data layer (verified safe \u2014 each is a fixed internal table-name constant alongside properly placeholdered values, not user input) is now explicitly annotated with its reasoning instead of silently triggering the scanner.<\/li>\n<\/ul>\n\n<h4>0.250.0<\/h4>\n\n<ul>\n<li>Fixed: a batch of WordPress.org Plugin Check findings from the plugin's first directory submission review \u2014 nonce unslashing\/sanitization (18 spots), $_FILES name\/type sanitization, missing translators comments, corrected phpcs:ignore sniff codes on file operations, Stripe billing-portal redirect now uses wp_safe_redirect(), removed load_plugin_textdomain()\/Domain Path header (unneeded since WP 4.6), dropped hotlinked third-party icons from the Migrator tool, added an == External services == readme section, and fixed a dead CleanTalk privacy-policy link.<\/li>\n<\/ul>\n\n<h4>Older versions<\/h4>\n\n<p>The full changelog going back to 0.208.0 (including 0.244.0 and earlier) is in <code>CHANGELOG.md<\/code>, shipped in this plugin's own files (this section is capped at 5000 characters).<\/p>\n\n<h3>Additional opt-in contact integrations<\/h3>\n\n<p>Brevo and ActiveCampaign: when configured and enabled for a form, send visitor email and configured name values to the selected list. Brevo terms\/privacy: https:\/\/www.brevo.com\/legal\/termsofuse\/ and https:\/\/www.brevo.com\/legal\/privacypolicy\/. ActiveCampaign terms\/privacy: https:\/\/www.activecampaign.com\/legal\/terms-of-service and https:\/\/www.activecampaign.com\/legal\/privacy-policy. No requests run until connected and enabled, except an explicitly requested read-only connection test.<\/p>","raw_excerpt":"A fast, free drag-and-drop form builder for WordPress with conditional logic, entry management, and email notifications built in.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/371377","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=371377"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/uzairrehman"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=371377"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=371377"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=371377"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=371377"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=371377"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=371377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}